Вопрос по android, android-actionbar – ActionBar MenuItem Divider

14

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

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

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

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

Я не хочу использовать ActionBarSherlock, как указано в этом постеШерлок Android Actionbar не показывает разделитель потому что это будет время для перехода от совместимости панели действий к ActionBarSherlock во всех моих проектах.

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

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

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

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

Я хочу использовать действие Бар реализации HoneyComb +. Я могу заменить ActionBar на Action Bar Compatibility, которую я собираюсь использовать с Pre-HoneyComb. Но я не хочу этим пользоваться. Vivek Khandelwal
Может быть, вы могли бы использовать кнопку с иконкой делителя, но без каких-либо действий? Martin Nuc
добавить динамический вертикальный вид там. это будет работать наверняка Rahul Upadhyay

Ваш Ответ

3   ответа
12

Я нашел ответ сам с помощью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 - мой селектор для элемента панели действий.

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

Вы можете переопределить существующую тему с помощью пользовательских стилей, например,

<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>
0

Update: This doesn't seem to work for Android 5 Lollipop and above:


Это лучший способ, который я нашел. Просто добавьте группу с фиктивным элементом в ваше меню:

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

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

Это не сработало

Похожие вопросы