Не удается изменить цвет текста с помощью выпадающего меню панели действий Android
Я использую раскрывающуюся навигацию с моей панелью действий, и я не могу получить разумный цвет для соответствующего текста при использовании темной панели действий. Сама панель действий темно-серая, а цвет текста черный, поэтому ее очень трудно прочитать.
я следовал основным инструкциям на руководство разработчика панели действий поэтому мой код просто
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);
и мои стили.XML был просто
<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
</style>
</resources>
Я думаю это должно было дал мне что-то разумное, но, как показывает следующее изображение, он выходит как черный текст на темно-сером фоне, так что это не хорошо.
Я пробовал играть со стилями.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-пакет. В любом кейс, конечно, то, что я хочу, должно быть возможно с голограммой.Свет.DarkActionBar, который я использую?
4 ответов
пожалуйста, простите мою некромантию, но это действительно беспокоило меня сегодня, и решение на самом деле довольно быстрое и не требует пользовательских адаптеров или стиля.
Если вы измените контекст в конструкторе SpinnerAdapter для использования getActionBar ().getThemedContext () вместо этого он покажет светлый текст на темном фоне, который будет соответствовать стилю панели действий.
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;
}
}
затем с помощью простых стилей.в 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)
и цвет текста всегда будет белым. Но нет ли более простого способа сделать это, используя настройки в стилях.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>