【问题标题】:ActionBar MenuItem Divider操作栏菜单项分隔符
【发布时间】:2012-07-05 06:30:23
【问题描述】:

有没有办法在 HoneyComb+ 的 ActionBar 中的菜单项之间显示分隔符。

有些帖子说只有当菜单项具有 android:showAsAction="withText" 时才会显示 Divider。

我只想显示图标而不是文本。

我通过实现 Action Bar Compatibility 成功展示了 Pre-HoneyComb 的 Divider。

我不想使用这篇文章Android actionbar sherlok doesn't show divider 中给出的 ActionBarSherlock,因为是时候在我的所有项目中从 Action Bar Compatibility 更改为 ActionBarSherlock。

当我看到 Android 源代码时,我发现 Divider 仅在具有如下所示的文本时才会显示(来自 ActionMenuItemView)

public boolean needsDividerBefore() {
    return hasText() && mItemData.getIcon() == null;
}

public boolean needsDividerAfter() {
    return hasText();
}

有没有一种方法可以为 ActionBar 提供 ActionMenuItemView 的实现,其中 needsDividerBefore() 将始终为 true

【问题讨论】:

  • 也许您可以使用带有分隔线图标的按钮,但无需任何操作?
  • 在那里添加动态垂直视图。它肯定会起作用
  • 我想使用 HoneyComb+ 的 action Bar 实现。我可以将 ActionBar 替换为与 Pre-HoneyComb 一起使用的 Action Bar Compatibility。但我不想用那个。

标签: android android-actionbar


【解决方案1】:

我在http://android-developers.blogspot.in/2011/04/customizing-action-bar.html 的帮助下自己找到了答案,但是,这并不能完全解决我的问题。它为标题添加了一个分隔符,还为主页图标添加了一个分隔符。还有左右分隔符。这也是可调的。

我将 android:selectableItemBackground 添​​加到我的主题中。

<item name="android:selectableItemBackground">@drawable/action_bar_item_selector</item>

action_bar_item_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/actionbar_compat_separator"></item>

    <item android:left="1dp" android:drawable="@drawable/actionbar_compat_item"></item>

</layer-list>

actionbar_compat_separator - 我的分隔符是可绘制的

actionbar_compat_item 是我的操作栏项目选择器。

已编辑

我找到了解决问题的更好方法。效果很好。

<item name="android:actionButtonStyle">@style/ActionButton</item> to my Theme

<style name="ActionButton" parent="android:style/Widget.Holo.Light.ActionButton">
        <item name="android:background">@drawable/action_bar_item_selector</item>
    </style>

【讨论】:

    【解决方案2】:

    您可以使用自定义样式覆盖现有主题,例如

    <style name="CustomTheme" parent="android:Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/ActionBar</item>
    </style>
    
    <style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">@color/action_bar_background</item>
        <item name="android:showDividers">beginning</item>
        <item name="android:divider">@color/action_bar_divider</item>
    </style>
    

    【讨论】:

      【解决方案3】:

      更新:这似乎不适用于 Android 5 Lollipop 及更高版本:


      这是我找到的最好方法。只需在菜单中添加一个包含虚拟项目的组:

      menu.xml

      <group>
          <!--dummy item to get a nice separator-->
          <item
              android:title=""
              android:showAsAction="always"
              android:enabled="false" />
      </group>
      
      <item android:id="@+id/action_example"
          ...
      

      虚拟项目的标题为空,因此它看起来不可见,并且它被禁用,因此无法单击。

      【讨论】:

        猜你喜欢
        • 2013-11-25
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        • 2013-10-15
        • 2014-10-31
        • 2015-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多