Подтвердить что ты не робот

ActionBar MenuItem Divider

Есть ли способ показать разделитель между элементами меню в ActionBar для HoneyComb +.

В некоторых сообщениях говорится, что Divider будет отображаться только в том случае, если элементы меню имеют android: showAsAction = "withText".

Я хочу показать только значок, а не текст.

Я успешно показал Divider для Pre-HoneyComb, выполнив совместимость с Action Bar.

Я не хочу использовать ActionBarSherlock, как указано в этом сообщении Android-панель sherlok не показывает divider, потому что пришло время перейти от Action Bar Compatibility к ActionBarSherlock в мои проекты.

Когда я увидел Android-источник, я обнаружил, что Divider будет отображаться только тогда, когда он имеет текст, как показано ниже (из ActionMenuItemView)

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

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

Есть ли способ, которым я могу дать свою реализацию для ActionMenuItemView для ActionBar, где needsDividerBefore() всегда будет давать true

4b9b3361

Ответ 1

Я нашел ответ сам с помощью http://android-developers.blogspot.in/2011/04/customizing-action-bar.html Однако это не полностью решает мою проблему. Он добавляет разделитель для Title, а также один для домашней иконки. Есть также левый и правый разделители. Это тоже настраивается.

Я добавил 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 - доступен для моего seperator

и actionbar_compat_item - мой селектор для элемента панели действий.

EDITED

Я нашел лучшее решение моей проблемы. Он работает хорошо.

<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"
    ...

Фиктивный элемент имеет пустой заголовок, поэтому он невидимый, и он отключен, поэтому его нельзя нажать.