6

我在我的操作栏上使用下拉导航,当使用深色操作栏时,我无法为相应的文本获得合理的颜色。操作栏本身是深灰色的,文字颜色是黑色的,所以很难阅读。

我遵循了操作栏开发人员指南上的基本说明,所以我的代码很简单

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-bundle (adt-bundle-windows-x86_64-20130219)。当我搜索解决方案时,我发现了很多关于 Sherlock 操作栏的信息,但是,Sherlock 的样式不包含在那个 adt-bundle 中。无论如何,我使用的 Holo.Light.DarkActionBar 肯定可以实现我想要的吗?

4

6 回答 6

28

请原谅我的死灵法,但这确实困扰着我,解决方案实际上非常快,不需要自定义适配器或样式。

如果您将 SpinnerAdapter 的构造函数中的上下文更改为使用 getActionBar().getThemedContext() 而不是这个,它将在深色背景上显示浅色文本,以匹配操作栏的样式。

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActionBar().getThemedContext(), R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
于 2013-12-26T19:43:13.740 回答
9

我发现我可以通过创建我自己的 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 文件中的设置没有更简单的方法吗?

于 2013-04-11T17:37:45.653 回答
4

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"/>
于 2014-08-24T16:46:44.693 回答
1

将此添加到您的 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>
于 2019-01-08T18:15:52.137 回答
1

<resources>
  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- Customize your theme here. -->
        <item name="android:textColor">#ffffff</item>

        <item name="android:itemBackground">#991005</item>

        <item name="android:actionBarSize">40dp</item>

        <item name="android:divider">#ff0000</item>
        <item name="android:dividerHeight">1dp</item>

        <item name="android:textSize">14sp</item>



    </style>
</resources>

于 2019-08-04T13:22:10.963 回答
0

如果您正在使用 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>
于 2015-03-29T16:06:06.983 回答