2

我正在延伸AppCompatActivity并使用setSupportActionBar()设置ActionBarsetTitle()在不同时间表现不同

设置标题有点混乱。

如果我这样做 -

Toolbar toolbar = (Toolbar) findViewById(R.id.titlebar); 
setSupportActionBar(toolbar); 
toolbar.setTitle("Title 1"); // Does not work 
setTitle("Title 2"); // Works 
getSupportActionBar().setTitle("Title 3"); // Works 
setTitle("Title 4"); // Does not work. Why? 

我看到那是什么getSupportActionBar().setTitle()正在为标题的新视图,然后活性失去引用。 这是Android的预期行为还是错误?

回答

1

如果您致电setSupportActionBar(Toolbar),,则操作栏将负责处理标题,因此您需要拨打getSupportActionBar().setTitle("My Title");来设置自定义标题。

还检查该链接,其中toolbar.setTitle("My title");可能导致像下面的问题: - 在Android应用Toolbar.setTitle方法没有效果 - 应用程序名称被显示为标题

而且toolbar是操作栏的一般形式。

我们可以将多个工具栏作为布局窗口小部件,但操作不是。

因此更好的办法是使用getSupportActionBar().setTitle("My Title");

+1

还要检查这个环节??? –

+0

你的回答没有说​​服我为什么too​​lbar.setTitle();在这种情况下不工作.. –

1

复制此行

setSupportActionBar(toolbar); 

添加行的末尾。

Toolbar toolbar = (Toolbar) findViewById(R.id.titlebar);  
setSupportActionBar(toolbar); 
toolbar.setTitle("Title 1"); 
setTitle("Title 2"); 
getSupportActionBar().setTitle("Title 3"); 
setTitle("Title 4"); 
setSupportActionBar(toolbar); 
+1

然后我们在#4行得到一个NPE? ;) – reVerse

+0

你可以使用setSupportActionBar();两次。一行在行#4之前,一行在结尾。 –

0

这一次您所设定的setSupportActionBar(Toolbar)预期的行为。支持库内部为显示标题创建新视图。

setTitle()是方法Activity它只会更新只有标题如果使用setActionBar(Toolbar)。但是,它没有后向兼容性。

参考

AppCompatDelegateImplBase

AppCompatDelegateImplV9

+0

我明白这一点。但是,如果第4行有效,那么第6行也应该起作用。 – Enigma

+0

@Enigma更新了答案,请检查它 –