Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t使用Android操作栏下拉导航更改文本颜色_Android_Android Actionbar_Android Styles - Fatal编程技术网

Can';t使用Android操作栏下拉导航更改文本颜色

Can';t使用Android操作栏下拉导航更改文本颜色,android,android-actionbar,android-styles,Android,Android Actionbar,Android Styles,我在操作栏中使用下拉导航,当使用深色操作栏时,我无法为相应的文本获得合理的颜色。动作栏本身是深灰色的,文本颜色是黑色的,所以很难阅读 我遵循了上的基本说明,因此我的代码非常简单 SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item); ActionBar.OnNavigatio

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

我遵循了上的基本说明,因此我的代码非常简单

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>

@样式/myActionDropDownStyle
@样式/myActionBar
@颜色/浅青色
@style/myActionBar.titleTextStyle
@颜色/橙色

它(1)能够将应用程序标题的文本颜色更改为橙色,(2)能够将操作栏中选定导航项的背景颜色更改为浅蓝色,(3)能够更改下拉列表的背景颜色,以便至少在浅背景下显示黑色文本。但是,对于操作栏中显示的选定项目或下拉列表中显示的项目,我不会更改文本颜色本身。我最好的尝试看起来也很可怕:-(

我所需要的只是一个深色的操作栏,在操作栏中显示的选定项目有一个合理的文本颜色,该颜色应与选定项目时使用的文本颜色相同,并且在选定项目时下拉列表的背景颜色与操作栏的颜色相同。但我不知道如何操作,有人知道吗lp


仅供参考,我正在使用Eclipse和最近下载的adt包(adt-bundle-windows-x86_64-20130219)。当我搜索解决方案时,我发现了很多关于Sherlock action bar的信息,但是Sherlock的样式没有包含在adt包中。无论如何,我想要的应该是我正在使用的Holo.Light.DarkActionBar?

我已经解决了,我可以通过创建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文件中的设置不是有一种更简单的方法吗?

请原谅我的亡灵术,但这确实让我今天感到困扰,解决方案实际上非常快速,不需要自定义适配器或样式

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

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActionBar().getThemedContext(), R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
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下拉列表_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>

@颜色/背景
#00FF00
#ff0000
1dp
#FFFFFF
10便士
#FF0000

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

@样式/菜单文本外观
@android:彩色/黑色

@颜色/原色
@颜色/原色暗
@颜色/颜色重音
#ffffff
#991005
40dp
#ff0000
1dp
14便士

参考此…您可以使用:
SpinnerAdapter mSpinnerAdapter=ArrayAdapter.createFromResource(新的ContextThemeWrapper(这个,android.R.style.Theme),R.array…,android.R.layout…);
或API 14+。我找到了答案。@SaDec,谢谢,如果我必须重新访问我的应用程序的这一部分,我会考虑您的建议:-)@SaDec'ActionBar.gethemedcontext()'在我看过你的评论后非常有用!您应该为将来的读者写一个答案。omg每天都在搜索同一问题的工作解决方案,下面是隐藏的答案-ActionBar.gethemedContext()。非常感谢Sa Dec,谢谢你的建议:-)。我需要这个答案的项目现在处于休眠状态,但如果项目再次启动,我会考虑你的建议。很好的解决方案。这应该是公认的答案。成功了!很多。我一直在与Theme Generator()创建的主题进行斗争,以了解如何将文本颜色从黑色更改为白色。这是一个了不起的发现!这救了我几个小时的头发拉扯!你无法想象我在这个问题上浪费了多少时间。最后一个优雅的解决方案,谢谢!PS:在我的例子中,我必须使用getSupportActionBar()作为getActionBar()的intead。这是清楚和合理的。我把它放在我的
values night/themes.xml中,它工作得很好。
<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>
<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>