如何在Android中通过代码动态修改ActionBar的居中标题文本?
实现不同Activity动态修改自定义ActionBar标题
实现步骤
- 给自定义Toolbar的TextView添加ID
修改custom_toolbar.xml,为TextView设置唯一ID,方便代码中定位控件:
<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Awesome App Blah Blah Blah" android:textStyle="bold" android:textSize="20dp" android:textColor="@color/gold_yellow" /> </LinearLayout>
- 在Activity中动态设置标题
在每个Activity的onCreate方法里,获取自定义Toolbar中的TextView,设置对应页面的专属文本:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); // 获取自定义Toolbar视图 View customToolbar = getSupportActionBar().setCustomView(R.layout.custom_toolbar); // 找到标题TextView TextView toolbarTitle = customToolbar.findViewById(R.id.toolbar_title); // 设置当前Activity的标题内容 toolbarTitle.setText("首页\n欢迎使用"); }
其他Activity只需修改setText的参数即可,比如设置页面:
toolbarTitle.setText("设置页面\n个性化配置");
优化方案:封装到BaseActivity
如果多个Activity都使用自定义ActionBar,可以把逻辑封装到基类,减少重复代码:
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupCustomActionBar(); } private void setupCustomActionBar() { getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); View customToolbar = getSupportActionBar().setCustomView(R.layout.custom_toolbar); TextView toolbarTitle = customToolbar.findViewById(R.id.toolbar_title); toolbarTitle.setText(getToolbarTitle()); } // 子类重写该方法返回对应标题 protected String getToolbarTitle() { return "默认标题\n默认副标题"; } }
子类Activity只需重写getToolbarTitle方法:
public class HomeActivity extends BaseActivity { @Override protected String getToolbarTitle() { return "首页\n欢迎使用"; } }
内容的提问来源于stack exchange,提问作者anta40
相关产品推荐
相关产品推荐

