Невозможно изменить цвет текста в раскрывающемся меню «Панель действий Android»

Я использую раскрывающуюся навигацию с моей панелью действий, и я не могу получить разумный цвет для соответствующего текста при использовании темной панели действий. Сама панель действий темно-серая, а цвет текста черный, поэтому ее очень трудно прочитать.

Я выполнил основные инструкции в руководстве разработчика Action Bar, поэтому мой код просто

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item); ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() { @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { // TODO return false; } }; ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actionBar.setListNavigationCallbacks(mSpinnerAdapter, navigationListener); 

И мой styles.xml был просто

 <resources> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> </style> </resources> 

Я думаю, что это должно было дать мне что-то разумное, но, как видно из следующего изображения, он выглядит как черный текст на темно-сером фоне, так что это нехорошо.

Изображение меню с черным текстом на темно-сером фоне

Я попытался сыграть с файлом styles.xml, чтобы попытаться решить проблему. Моя лучшая попытка заключалась в следующем:

 <resources> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:actionDropDownStyle">@style/myActionDropDownStyle</item> <item name="android:actionBarStyle">@style/myActionBar</item> </style> <style name="myActionDropDownStyle" parent="android:style/Widget.Holo.Light.Spinner"> <item name="android:background">@color/LightCyan</item> </style> <style name="myActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:titleTextStyle">@style/myActionBar.titleTextStyle</item> </style> <style name="myActionBar.titleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"> <item name="android:textColor">@color/Orange</item> </style> </resources> 

Лучшая попытка сделать элементы доступными в раскрывающемся меню навигации

Который был (1) способен изменить цвет текста заголовка приложения на оранжевый, (2) изменить цвет фона выбранного элемента навигации в панели действий на голубой, (3) изменить цвет фона Выпадающего меню, чтобы по крайней мере черный текст был показан на светлом фоне. Однако ничто не меняет цвет текста, либо для выбранного элемента, отображаемого на панели действий, либо для элементов, отображаемых в раскрывающемся списке. Моя лучшая попытка также выглядит ужасно :-(!

Все, что я хочу – это панель темных действий с разумным цветом текста для выбранного элемента, показанного на панели действий, который должен быть того же цвета текста, который используется при выборе элемента, и с цветом фона для раскрывающегося списка, когда элемент Будучи выбранным тем же цветом, что и панель действий. Но я не могу понять, как это сделать, может ли кто-нибудь помочь?

FYI, я использую Eclipse с пакетом adt, который я загрузил совсем недавно (adt-bundle-windows-x86_64-20130219). Когда я ищу решения, я нахожу много о панели действий Шерлока, однако стили для Шерлока не были включены в этот пакет adt. В любом случае, конечно, что я хочу, должно быть возможно с помощью Holo.Light.DarkActionBar, который я использую?

Пожалуйста, простите мою некромантию, но это действительно прослушивало меня сегодня, и решение на самом деле довольно быстро и не требует специальных адаптеров или стилей.

Если вы измените контекст в конструкторе SpinnerAdapter, чтобы использовать getActionBar (). GetThemedContext (), а не это, он покажет светлый текст на темном фоне, который будет соответствовать стилю Action Bar.

 SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActionBar().getThemedContext(), R.array.action_list, android.R.layout.simple_spinner_dropdown_item); 

Я разработал, что я могу изменить цвета для раскрывающейся навигации в коде, создав свой собственный подкласс ArrayAdapter следующим образом:

 public class myArrayAdaptor<T> extends ArrayAdapter<T> { public myArrayAdaptor(Context context, int textViewResourceId, T[] objects) { super(context, textViewResourceId, objects); } public static myArrayAdaptor<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId) { CharSequence[] strings = context.getResources().getTextArray(textArrayResId); return new myArrayAdaptor<CharSequence>(context, textViewResId, strings); } @Override public View getView(int position, View convertView, ViewGroup parent) { return SetColourWhite(super.getView(position, convertView, parent)); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return SetColourWhite(super.getView(position, convertView, parent)); } private View SetColourWhite(View v) { if (v instanceof TextView) ((TextView)v).setTextColor(Color.rgb(0xff, 0xff, 0xff)); // white return v; } } 

Затем с помощью простых styles.xml

 <resources> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> </style> </resources> 

Я могу заменить класс myArrayAdaptor

 SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item) 

И цвет текста всегда будет белым. Но нет ли более простого способа сделать это, используя настройки в файле styles.xml?

Java-код

 SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, R.array.actions,R.layout.dropdown_textcolor); // OnNavigationListener OnNavigationListener callback = new OnNavigationListener() { String[] items = getResources().getStringArray(R.array.actions); public boolean onNavigationItemSelected(int position, long id) { // Do stuff when navigation item is selected Log.d("NavigationItemSelected", items[position]); // Debug return true; } }; ActionBar actions = getSupportActionBar(); actions.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); actions.setDisplayShowTitleEnabled(false); actions.setListNavigationCallbacks(adapter, callback); 

Xml dropdown_textcolor.xml

 <?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerDropDownItemStyle" android:singleLine="true" android:layout_width="match_parent" android:textColor="@android:color/white" android:layout_height="wrap_content" android:padding="10dp" android:ellipsize="marquee" android:textAlignment="inherit"/> 

Если вы используете библиотеку поддержки AppCompat .. это может вам помочь ..

 <style name="MyActionBar3" parent="@style/Widget.AppCompat.Light.ActionBar"> <item name="android:background">@color/ActionBarBackground</item> </style> <style name="MyActionBarDropDownStyle" parent=""> <item name="android:background">#00FF00</item> <item name="android:divider">#ff0000</item> <item name="android:dividerHeight">1dp</item> <item name="android:textColor">#FFFFFF</item> <item name="android:textSize">10sp</item> </style> <style name="MyTextStyle" parent="@style/Widget.AppCompat.Light.Base.ListPopupWindow"> <item name="android:popupBackground">#FF0000</item> </style>