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
相关产品推荐
相关产品推荐

