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
Ответы
Ответ 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"
...
Фиктивный элемент имеет пустой заголовок, поэтому он невидимый, и он отключен, поэтому его нельзя нажать.