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

Android应用ActionBar保留默认图标并添加并列自定义图标方法咨询

嘿,这个需求很好实现!要在ActionBar里同时保留默认图标、加上自定义图片,最灵活的方式就是用自定义ActionBar布局——毕竟默认ActionBar的可定制性有限,自定义布局能让你完全掌控各个元素的位置和样式。下面给你两种常用的实现方案,附带代码示例:

方案一:基于原生ActionBar实现

1. 创建自定义ActionBar布局

首先在res/layout下新建布局文件action_bar_custom_layout.xml,我们用线性布局来排列默认图标和自定义图片,还能设置居中显示:

<?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="match_parent"
    android:gravity="center"
    android:orientation="horizontal"
    android:paddingHorizontal="16dp">

    <!-- 默认应用图标,替换成你自己的默认图标即可 -->
    <ImageView
        android:id="@+id/iv_default_app_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"
        android:layout_marginEnd="8dp"/>

    <!-- 你的自定义图片,记得先把图片放到drawable/mipmap目录 -->
    <ImageView
        android:id="@+id/iv_custom_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/your_custom_image"/>

</LinearLayout>

2. 在Activity中启用自定义布局

在Activity的onCreate方法里,替换默认ActionBar的显示内容为我们的自定义布局:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        // 关闭默认的标题和图标显示,避免和自定义布局冲突
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setDisplayShowHomeEnabled(false);
        // 开启自定义布局模式
        actionBar.setDisplayShowCustomEnabled(true);

        // 加载自定义布局
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View customActionBarView = inflater.inflate(R.layout.action_bar_custom_layout, null);

        // 设置自定义布局到ActionBar,同时让布局填满整个ActionBar区域
        ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
                ActionBar.LayoutParams.MATCH_PARENT,
                ActionBar.LayoutParams.MATCH_PARENT
        );
        actionBar.setCustomView(customActionBarView, layoutParams);
    }
}

方案二:基于Toolbar实现(官方推荐)

现在Android官方更推荐用Toolbar替代原生ActionBar,它的定制性更强,实现起来也更直观:

1. 在Activity布局中添加Toolbar

直接在你的Activity布局文件(比如activity_main.xml)里添加Toolbar,并嵌入我们的图标布局:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/main_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp">

    <!-- 自定义图标区域,居中显示两个图标 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/iv_default_app_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/ic_launcher"
            android:layout_marginEnd="8dp"/>

        <ImageView
            android:id="@+id/iv_custom_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/your_custom_image"/>

    </LinearLayout>

</androidx.appcompat.widget.Toolbar>

2. 在Activity中设置Toolbar为ActionBar

在onCreate方法里把Toolbar设置为当前Activity的ActionBar,并关闭默认标题:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = findViewById(R.id.main_toolbar);
    setSupportActionBar(toolbar);

    // 关闭默认标题显示,只保留我们的自定义图标
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    }
}

一些小提示

  • 确保自定义图片的尺寸适配ActionBar高度(一般是?attr/actionBarSize,默认是56dp),避免图片拉伸或者超出边界;
  • 如果需要给图标添加点击事件,直接在Activity里找到对应的ImageView,设置setOnClickListener即可;
  • 如果想保留默认的返回按钮(比如在详情页),可以在自定义布局里添加返回箭头ImageView,或者调用getSupportActionBar().setDisplayHomeAsUpEnabled(true)(但此时默认图标会变成返回箭头,若要同时保留应用图标和返回箭头,需要在自定义布局里手动添加)。

内容的提问来源于stack exchange,提问作者Tailor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:33:41