Android开发:如何在多Activity中复用自定义ToolBar配置?
嘿,作为Android新手碰到这种重复写代码的情况太常见啦!别担心,咱们用基类Activity的方式就能一次性搞定所有页面的自定义ActionBar配置,简单又好维护,我给你一步步讲清楚~
方案一:创建BaseActivity基类(最推荐,适合新手)
1. 先准备可复用的AppBar布局
创建一个通用的AppBar布局文件res/layout/include_appbar.xml,把AppBarLayout和Toolbar封装在这里:
<com.google.android.material.appbar.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/Theme.YourAppName.AppBarOverlay"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/Theme.YourAppName.PopupOverlay"/> </com.google.android.material.appbar.AppBarLayout>
2. 创建BaseActivity统一处理Toolbar初始化
新建BaseActivity类,继承AppCompatActivity,把所有Toolbar相关的初始化逻辑都放在这里:
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } // 重写setContentView,确保加载页面布局后自动初始化Toolbar @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); initToolbar(); } private void initToolbar() { Toolbar toolbar = findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); // 统一设置所有页面的默认行为,比如显示返回键 if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } } } // 统一处理返回键点击(可选,避免每个页面重复写) @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { onBackPressed(); return true; } return super.onOptionsItemSelected(item); } }
3. 让目标Activity继承BaseActivity
你的6个Activity只需要继承BaseActivity,布局里引入刚才的include_appbar,就自动拥有自定义ActionBar了:
public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 布局里要包含<include layout="@layout/include_appbar"/> // 这里只需要写当前页面的业务代码,不用再管Toolbar初始化! // 如果要修改当前页面的标题,直接调用即可: if (getSupportActionBar() != null) { getSupportActionBar().setTitle("首页"); } } }
4. 最后修改主题,去掉默认ActionBar
打开res/values/styles.xml,把App主题设置为不带默认ActionBar的样式:
<style name="Theme.YourAppName" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 你的主题颜色配置 --> <item name="colorPrimary">@color/your_primary_color</item> <item name="colorPrimaryVariant">@color/your_primary_variant_color</item> <item name="colorOnPrimary">@color/white</item> <!-- 其他主题设置 --> </style>
额外小技巧
如果某个页面需要特殊配置(比如隐藏返回键、自定义标题样式),只需要在子类Activity里重写对应的方法就行:
@Override protected void initToolbar() { super.initToolbar(); if (getSupportActionBar() != null) { getSupportActionBar().setDisplayHomeAsUpEnabled(false); // 隐藏返回键 getSupportActionBar().setTitle("特殊页面"); } }
这样一来,你所有6个Activity只要继承BaseActivity、布局引入通用AppBar,就能自动拥有统一的自定义ActionBar,再也不用重复粘贴初始化代码啦~
内容的提问来源于stack exchange,提问作者Elm Liu
相关产品推荐
相关产品推荐

