You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:52:29