我在操作栏中使用下拉导航,当使用黑暗操作栏时,我无法获得相应文本的合理颜色。动作栏本身是深灰色,文本颜色是黑色,因此很难阅读。
我按照Action Bar developer's guide上的基本说明操作,因此我的代码就是
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当然可以实现我想要的东西吗?
答案 0 :(得分:28)
请原谅我的死灵法术,但今天这真的让我感到烦恼,解决方案实际上非常快,不需要自定义适配器或样式。
如果你在SpinnerAdapter的构造函数中更改上下文以使用getActionBar()。getThemedContext()而不是它,它将在深色背景上显示与Action Bar的样式相匹配的浅色文本。 / p>
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActionBar().getThemedContext(), R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
答案 1 :(得分: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文件中的设置是不是有更简单的方法呢?
答案 2 :(得分: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"/>
答案 3 :(得分: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>
答案 4 :(得分:0)
将其添加到您的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>
答案 5 :(得分:0)
<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>