无法与Android操作栏,下拉导航更改文本颜色(Can't change the text

2019-08-21 20:24发布

我使用的下拉导航我的行动吧,用暗操作栏时,我不能得到一个合理的颜色对应的文本。 操作栏本身就是一个暗灰色,而文字颜色是黑色的,所以这是非常难以阅读。

我也跟着上的基本指令操作栏的开发者指南 ,所以我的代码只是

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),其能够改变背景颜色下拉,使得至少上的黑色文字显示对一个光背景。 但是什么我做更改文本颜色本身,无论是在动作栏中显示所选择的项目,或在下拉列表中显示的项目。 我最好的尝试也看起来可怕:-(!

我想要的是一个合理的文本颜色操作栏显示所选择的项目,被选中的项目时,应使用相同的文字颜色暗操作栏,并与背景颜色下拉时的产品被选择作为颜色作为操作栏相同。 但是我不知道如何做到这一点,任何人都可以帮忙吗?

仅供参考,我使用Eclipse与ADT-捆绑我下载最近(ADT-束窗口-x86_64-20130219)。 当我搜索的解决方案,我发现了很多关于福尔摩斯行动起来吧,但是,对于福尔摩斯的风格并没有包含在ADT-束。 在任何情况下,肯定是我想应该是可能的,我使用的Holo.Light.DarkActionBar?

Answer 1:

请原谅我的巫术,但是这真的窃听我今天和解决方案其实是相当快的,不需要自定义适配器或造型。

如果更改上下文中SpinnerAdapter的构造函数中使用getActionBar()。getThemedContext(),而不是这个,它会显示一个黑暗的背景下,将匹配操作栏的样式浅色文字。

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


Answer 2:

我已经工作了,我可以改变在代码中的下拉导航的颜色,通过创建我自己的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文件中这样使用设置一个更简单的方法?



Answer 3:

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


Answer 4:

如果您正在使用程序兼容性支持库。这可能会帮助你..

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


Answer 5:

在styles.xml,将改变你的隐藏的操作菜单文本的颜色添加这样的:

<style name="AppTheme.AppCompat.Light" parent="@android:style/Theme.Holo.Light.DarkActionBar"> 
        <item name="android:itemTextAppearance">@style/MenuTextAppearance</item>    
</style>

<style name="MenuTextAppearance">
        <item name="android:textColor">@android:color/black</item>
</style>


文章来源: Can't change the text color with Android Action Bar drop-down navigation