Раскрывающиеся элементы 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>

Мне просто нужно изменить цвет фона элементов в выпадающем списке.

Большое спасибо за вашу помощь!

РЕДАКТИРОВАТЬ:

Я также попробовал это, и это все еще не работает:

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

5 ответов

Решение

У меня была та же проблема, и после большого количества царапин на голове - типа царапин, как у собаки с плохим случаем блох - я заставил ее работать. Это с 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. Вот что показано в примере в источнике ABS: 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
    • андроид: spinnerItemStyle
    • spinnerItemStyle
  • sherlock_spinner_dropdown_item
    • андроид: spinnerDropDownItemStyle
    • spinnerDropDownItemStyle

Помните, что необходимы оба стиля - android: стили с префиксом для встроенной панели действий ICS и стиль без префикса android: для стиля 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

Чтобы изменить фон для рисования элемента меню на панели действий Sherlock (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>

надеюсь это поможет.

Я использовал это, и его работа для меня

<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" (цвет ИЛИ изображения)

Я не уверен, что на этот вопрос был дан удовлетворительный ответ, но я столкнулся с этой проблемой и не нашел ответ, который мне понравился. Казалось, что у меня была довольно стандартная конфигурация ActionBarSherLock, и использование раскрывающейся навигации дало мне некоторые плохие результаты из коробки. Черный текст на черном фоне. Я хочу сделать текст белым. Вот как я это сделал:

Начнем с того, что базовая тема моего приложения расширяет тему. Шерлок:

<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 моей деятельности):

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's 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.

ActionBarSherlock требует от вас использовать одну из 3 тем. Вы можете расширить их и переопределить стиль выпадающего меню, например так:

<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light">
   <item name="actionDropDownStyle">@style/MyDropDownNav</item>
</style>

Предполагается, что вам нужна тема с голографическим освещением, а ваш стиль выпадающего меню - MyDropDownDav.

Затем в своем коде вы просто переключаетесь на использование своей темы (либо в манифесте, либо делаете это в onCreate Activity).

Другие вопросы по тегам