Android折叠工具栏标题动态修改:点击FAB标题不变的原因及解决方法
嘿,这个问题我可太熟了!很多人第一次用CollapsingToolbarLayout都会踩这个坑,我来给你拆解清楚~
标题无法改变的原因
当你使用CollapsingToolbarLayout时,它会完全接管Toolbar的标题显示逻辑——你直接调用setTitle()给Toolbar或者Activity设置标题,其实会被CollapsingToolbarLayout自己维护的标题给覆盖掉。默认情况下,它会用布局文件里app:title属性的值,或者初始化时设置的标题,之后你直接修改Toolbar的标题根本不会生效,因为它不是实际显示的那个标题载体。
实现点击FAB修改标题的方法
其实解决起来很简单,直接操作CollapsingToolbarLayout本身就行,步骤如下:
1. 获取CollapsingToolbarLayout实例
在你的ScrollingActivity的onCreate()方法里,先通过id找到布局中的CollapsingToolbarLayout(默认Scrolling Activity生成的布局里,它的id就是collapsing_toolbar,如果你改了id要对应替换):
// Kotlin 代码示例 val collapsingToolbar = findViewById<CollapsingToolbarLayout>(R.id.collapsing_toolbar)
如果你用Java的话:
// Java 代码示例 CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
2. 给FAB设置点击事件,修改标题
接着找到FAB的实例,给它添加点击监听器,在点击回调里调用CollapsingToolbarLayout的setTitle()方法:
// Kotlin 代码示例 val fab = findViewById<FloatingActionButton>(R.id.fab) fab.setOnClickListener { collapsingToolbar.setTitle("我的新标题") }
Java版本:
// Java 代码示例 FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { collapsingToolbar.setTitle("我的新标题"); } });
额外小提示
如果你的Toolbar在折叠状态下需要显示和展开时不同的标题,可以配合AppBarLayout的滚动监听来切换,但大多数场景下,直接修改CollapsingToolbarLayout的标题就足够让展开/折叠状态下的标题同步更新啦。
内容的提问来源于stack exchange,提问作者Kunal Das
相关产品推荐
相关产品推荐

