能否对ActionBar中的元素进行分隔?具体该如何实现?
提问内容
能否像截图所示那样对ActionBar中的元素进行分隔?具体该如何操作?ActionBar右侧的按钮来自ActionBar的menu,配置了app:showAsAction="always"属性,我想要实现和截图一致的ActionBar效果:
ActionBar元素分隔实现方案
完全可以实现截图中的分隔效果,针对你使用menu配置app:showAsAction="always"的场景,推荐两种可行方案:
方案1:自定义Menu Item布局实现(灵活度最高,适合局部调整)
这种方式可以精准控制分隔线的位置、样式,不会影响其他页面的ActionBar效果:
- 第一步:创建分隔线布局,在
res/layout目录下新建layout_actionbar_divider.xml:
<View xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="1dp" android:layout_height="match_parent" android:layout_marginVertical="8dp" android:background="#CCCCCC" />
你可以自行修改颜色、上下边距匹配你的设计风格。
- 第二步:在你的menu xml配置中,插入分隔线item,放在需要分隔的两个按钮中间:
<!-- 前面的业务按钮item --> <item android:id="@+id/menu_divider" android:title="" app:showAsAction="always" app:actionLayout="@layout/layout_actionbar_divider" /> <!-- 后面的业务按钮item -->
- 注意:如果你的业务按钮本身也用了
app:actionLayout自定义布局,只需要在对应的布局里加上分隔线即可,不需要额外加单独的分隔item。
方案2:全局主题配置(适合所有ActionBar统一加分隔线)
如果你的应用所有页面的ActionBar按钮都需要加分隔,可以直接修改主题样式:
- 第一步:在
res/drawable下创建分隔线drawableaction_bar_divider.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#CCCCCC" /> <size android:width="1dp" /> </shape>
- 第二步:在
res/values/styles.xml中修改你的ActionBar主题配置:
<style name="AppActionBarStyle" parent="Widget.AppCompat.ActionBar"> <item name="android:divider">@drawable/action_bar_divider</item> <item name="android:showDividers">middle</item> <item name="android:dividerPadding">8dp</item> </style>
- 第三步:将该样式应用到你的App主题中:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="actionBarStyle">@style/AppActionBarStyle</item> </style>
补充说明
- 如果你现在已经用Toolbar替换了原生ActionBar,可以直接在Toolbar的xml布局里插入分隔线View,调整起来更简单。
- 自定义
actionLayout的item如果需要响应点击,需要在onCreateOptionsMenu中手动获取布局对象设置点击事件,默认的onOptionsItemSelected不会响应自定义布局的点击。
内容的提问来源于stack exchange,提问作者Diset
相关产品推荐
相关产品推荐

