Styling Sherlock Action Bar выпадающие элементы
Я пытался какое-то время стилизовать элементы в раскрывающемся списке, который я добавил в панель действий, но я не могу придумать правильный код.
Я попытался изучить abs__styles.xml
и abs__themes.xml
в проекте SherlockActionBar
, но ни один из элементов, которые я добавил в мой проект, не работал.
Способ создания меню следующий:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Sharing icons
SubMenu submenu = menu.addSubMenu(null);
submenu.add(getResources().getString(R.string.twitter));
submenu.add(getResources().getString(R.string.facebook));
submenu.add(getResources().getString(R.string.email));
// Share button itself
MenuItem ShareButton = submenu.getItem();
ShareButton.setIcon(R.drawable.icon_share_triangle);
ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
// Twitter submenu button
MenuItem TwitterItem = submenu.getItem(0);
TwitterItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
TwitterItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
setShareTwitterIntent();
return true;
}
});
...
}
Я также попытался взглянуть на это сообщение , используя следующий код, но все же не повезло:
<!-- style the list navigation -->
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar">
<item name="android:background">@drawable/ad_spinner_background_holo_light</item>
<item name="android:popupBackground">@drawable/ad_menu_dropdown_panel_holo_light</item>
<item name="android:dropDownSelector">@drawable/ad_selectable_background</item>
</style>
Мне просто нужно изменить цвет фона элементов в выпадающем списке.
Большое спасибо за вашу помощь!
EDIT:
Я также пробовал это, и он все еще не работает:
<item name="android:actionDropDownStyle">@style/MyApp.DropDownNav</item>
<item name="actionDropDownStyle">@style/MyApp.DropDownNav</item>
...
<style name="MyApp.DropDownNav" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar">
<item name="android:background">@drawable/sharing_panel</item>
</style>
Ответы
Ответ 1
У меня была такая же проблема, и после большого количества царапин на голове - вроде царапины, как собака с плохим случаем блох - я получил ее на работу. Это с ABS 4.1 (90). Следующий код изменит цвет фона выпадающего элемента.
SomeActivity.java
Context context = ab.getThemedContext();
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
context, R.array.map_activity_view_list,
R.layout.sherlock_spinner_item);
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
Примечание. Вы используете R.layout.sherlock_spinner_item для createFromResource и R.layout.sherlock_spinner_dropdown_item для setDropDownViewResource.
Это то, что появляется в образце в источнике АБС:
https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ListNavigation.java
Это связано с тем, что невыделенное раскрывающееся меню на панели действий, когда является макетом sherlock_spinner_item, и фактические элементы выпадающего списка используют макет sherlock_spinner_dropdown_item, что означает, что стили различны для каждого:
- sherlock_spinner_item
- Android: spinnerItemStyle
- spinnerItemStyle
- sherlock_spinner_dropdown_item
- Android: spinnerDropDownItemStyle
- spinnerDropDownItemStyle
Помните, что нужны оба стиля - андроид: префиксные стили для родного ICS ActionBar и стиль без андроида: префикс для стиля AcrionBarSherlock на устройствах старше ICS.
RES/значения/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.MyApp" parent="Theme.Sherlock.Light">
<!-- the text when loading -->
<!--
<item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item>
-->
<!-- the dropdown items -->
<item name="android:spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item>
<item name="spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item>
<!-- the action bar dropdown menu item -->
<!--
<item name="android:spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item>
<item name="spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item>
-->
</style>
<style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
<item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item>
<item name="android:titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item>
</style>
<style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title">
<item name="android:textColor">@color/orange</item>
</style>
<style name="MyApp.Widget.Holo.DropDownItem" parent="Widget.Sherlock.Light.DropDownItem.Spinner">
<item name="android:background">@color/orange</item>
</style>
<style name="MyApp.Widget.Holo.SpinnerItem" parent="Widget.Sherlock.TextView.SpinnerItem">
<item name="android:background">@color/orange</item>
</style>
</resources>
RES/значения/color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="orange">#ffEf4f1f</color>
</resources>
Пожалуйста, отметьте как ответ, если это решает его для вас. Спасибо!
Ссылки:
Обзор стилей:
https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__styles.xml
Обзор тем:
https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__themes.xml
Ответ 2
Чтобы изменить фоновый рисунок в пункте меню на панели действий Шерлок (v4.1.0), используйте следующее:
<style name="My_Theme" parent="Theme.Sherlock">
<item name="android:popupMenuStyle">@style/MyApp.PopupMenuStyle</item>
<item name="popupMenuStyle">@style/MyApp.PopupMenuStyle</item>
</style>
<style name="MyApp.PopupMenuStyle" parent="Widget.Sherlock.ListPopupWindow">
<item name="android:popupBackground">@drawable/menu_item_background</item>
</style>
надеюсь, что это поможет.
Ответ 3
Я использовал это, и его работа для меня
<style name="MyDropDownItem" parent="Widget.Sherlock.Spinner.DropDown.ActionBar">
<item name="android:background">@drawable/spinner_background_holo_light</item>
<item name="android:popupBackground">@color/actionbar_normal</item>
<item name="android:dropDownSelector">@drawable/list_selector_holo_light</item>
</style>
<style name="myTheme" parent="@style/Theme.Sherlock">
...
...
...
<item name="android:actionDropDownStyle">@style/MyDropDownItem</item>
<item name="actionDropDownStyle">@style/MyDropDownItem</item>
</style>
где
"spinner_background_holo_light" и "list_selector_holo_light" являются селекторами
и
"actionbar_normal" drawable (изображение ИЛИ цвет)
Ответ 4
Я не уверен, удовлетворен ли ответ на этот вопрос, но я столкнулся с этой проблемой и не нашел ответа, который мне понравился. Похоже, что у меня была довольно стандартная конфигурация ActionBarSherLock, и использование раскрывающейся навигации дало мне некоторые плохие результаты из коробки. Черный текст на черном фоне. Я хочу сделать текст белым. Вот как я это сделал:
Во-первых, моя основная тема темы расширяет Theme.Sherlock:
<style name="AppBaseTheme" parent="Theme.Sherlock">
</style>
Моя фактическая тема приложения AppTheme расширяет мою базу (я не могу вспомнить, почему я сделал это в то время, это, вероятно, не нужно).
<style name="AppTheme" parent="AppBaseTheme">
<item name="spinnerItemStyle">@style/SpinnerItemStyle</item>
<item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item>
</style>
Мне нужно было переопределить Widget.Sherlock.TextView.SpinnerItem
и так далее:
<style name="SpinnerItemStyle" parent="Widget.Sherlock.TextView.SpinnerItem">
<item name="android:textAppearance">@style/TextAppearance.MySpinnerItem</item>
</style>
Причиной этого было обращение к виджету TextApperance: TextAppearance.Sherlock.Widget.TextView.SpinnerItem
Это было отменено, как показано ниже:
<style name="TextAppearance.MySpinnerItem" parent="TextAppearance.Sherlock.Widget.TextView.SpinnerItem">
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">16sp</item>
<item name="android:textStyle">normal</item>
</style>
Моя самая большая ошибка в привязке, чтобы получить текст при попытке исправить это, пыталась напрямую установить textColor в переопределенном SpinnerItemStyle. Поскольку он использовал виджет textAppearance, он просто не работал.
Затем мой код, чтобы сделать эту работу, выглядит так (в моей работе onCreate method):
SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this,
R.array.call_type, R.layout.sherlock_spinner_item);
OnNavigationListener onNavigationListener = new OnNavigationListener() {
// Get the same strings provided for the drop-down ArrayAdapter
String[] strings = getResources().getStringArray(R.array.call_type);
@Override
public boolean onNavigationItemSelected(int position, long itemId) {
String filter = strings[position];
filterCalls(filter);
return true;
}
};
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(spinnerAdapter,
onNavigationListener);
Это позволило мне изменить цвет текста, на счетчике выпадающего списка с помощью ActionBarSherlock.
Ответ 5
ActionBarSherlock требует использования одной из трех тем. Вы можете их расширить, и переопределите стиль выпадающего списка, например:
<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light">
<item name="actionDropDownStyle">@style/MyDropDownNav</item>
</style>
Предполагается, что вам нужна голоновая тема, а стиль выпадающего меню - MyDropDownDav.
Затем в вашем коде вы просто переключаетесь на использование своей темы (либо в манифесте, либо в Activity onCreate).