[英]How to change Menu Item text Color of holo theme in Android?
I am using Theme.Holo in my app. 我在我的应用程序中使用Theme.Holo。
I have customized my theme using following Style.xml 我使用以下Style.xml自定义了我的主题
<style name="CustomActivityTheme" parent="@android:style/Theme.Holo">
<item name="android:actionBarStyle">@style/CustomActivityTheme.ActionBar</item>
<item name="android:actionMenuTextColor">#000000</item>
<item name="android:divider">@drawable/action_bar_div</item>
<item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
<item name="android:popupMenuStyle">@style/MyPopupMenu</item>
<item name="android:itemBackground">@drawable/menu_item_background_fill</item>
<item name="android:itemTextAppearance">@style/myCustomMenuTextApearance</item>
</style>
<style name="myCustomMenuTextApearance" parent="@android:style/TextAppearance.Widget.TextView.PopupMenu">
<item name="android:textColor">#404040</item>
</style>
<style name="CustomActivityTheme.ActionBar.OverFlow" parent="@android:style/TextAppearance">
<item name="android:textColor">#404040</item>
<item name="android:textSize">18sp</item>
</style>
<style name="CustomButton">
<item name="android:background">@drawable/button_selector</item>
</style>
<style name="CustomProgressButton">
<item name="android:background">@drawable/custom_progress_button</item>
</style>
<style name="CustomProfileButton">
<item name="android:background">@drawable/custom_profile_button</item>
</style>
<style name="CustomSharingButton">
<item name="android:background">@drawable/custom_sharing_button</item>
</style>
<style name="CustomListBlue">
<item name="android:background">@drawable/custom_listblue</item>
</style>
<style name="MyPopupMenu" parent="android:style/Widget.Holo.Light.ListPopupWindow">
<!-- <item name="android:background">#B2B2B2</item> -->
<item name="android:popupBackground">#B2B2B2</item>
</style>
<style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:src">@drawable/overflow</item>
</style>
<style name="CustomActivityTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">@drawable/actionbar_bg</item>
<item name="android:titleTextStyle">@style/CustomActivityTheme.ActionBar.Text</item>
<item name="android:subtitleTextStyle">@style/CustomActivityTheme.ActionBar.Text</item>
<!-- <item name="android:actionOverflowButtonStyle">@drawable/overflow.png</item> -->
</style>
<style name="CustomActivityTheme.ActionBar.Text" parent="@android:style/TextAppearance">
<item name="android:textColor">#000000</item>
<item name="android:textSize">16sp</item>
</style>
<style name="activated" parent="android:Theme.Holo">
<item name="android:background">?android:attr/activatedBackgroundIndicator</item>
</style>
<!-- style for removing the floating dialog -->
<style name="CustomDialogTheme">
<item name="android:windowIsFloating">false</item>
<item name="android:windowNoTitle">true</item>
</style>
<!-- style for transparent image resource activity -->
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowAnimationStyle">@style/MyAnimation.Window</item>
</style>
<!-- Animations for a non-full-screen window or activity. -->
<style name="MyAnimation.Window" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/grow_from_middle</item>
<item name="android:windowExitAnimation">@anim/shrink_to_middle</item>
</style>
<!-- style for transparent audio and video resource activity -->
<style name="Theme.Transparent_Player" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">false</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowAnimationStyle">@style/MyPlayerAnimation.Window</item>
</style>
<!-- Animations for a non-full-screen window or activity. -->
<style name="MyPlayerAnimation.Window" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/grow_from_action_bar</item>
<item name="android:windowExitAnimation">@anim/shrink_to_action_bar</item>
</style>
I am getting below output in 10 inch device 我在10英寸设备的输出低于输出
and in 4.7 inch device, it is showing output(with white text color instead if #404040 color code) 在4.7英寸设备中,它显示输出(如果#404040颜色代码,则使用白色文本颜色)
Here, I am able to set the background color but, menu item text color is not changed in 4.7 inch device 在这里,我可以设置背景颜色但是,4.7英寸设备中的菜单项文本颜色没有改变
in 4.7 inch device, i am not having overflow menu icon, I am opening this menu by pressing menu button. 在4.7英寸设备中,我没有溢出菜单图标,我按菜单按钮打开此菜单。
How to set the text color same as 10 inch device? 如何设置与10英寸设备相同的文本颜色?
Thanx in advance!!! Thanx提前!!!
My menu layout code is: 我的菜单布局代码是:
<item
android:id="@+id/home"
android:title="@string/home"/>
<item
android:id="@+id/viewer"
android:title="@string/viewer"/>
<item
android:id="@+id/quiz"
android:title="@string/quiz"/>
<item
android:id="@+id/results"
android:title="@string/results"/>
<item
android:id="@+id/chat"
android:title="@string/chat"/>
<item
android:id="@+id/settings"
android:title="@string/settings"/>
<item
android:id="@+id/intro"
android:title="@string/intro"/>
<item
android:id="@+id/lookitup"
android:title="@string/lookitup"/>
<item
android:id="@+id/standing"
android:title="@string/standing"/>
<item
android:id="@+id/sharing"
android:title="@string/sharing"/>
<item
android:id="@+id/advance"
android:title="@string/advance"/>
<item
android:id="@+id/reset"
android:title="@string/reset"/>
<item
android:id="@+id/refresh"
android:title="@string/refresh"/>
<item
android:id="@+id/sync_now"
android:title="@string/sync_now"/>
<item
android:id="@+id/sync_info"
android:title="@string/sync_info"/>
<item
android:id="@+id/menuIconInfo"
android:icon="@drawable/info_light_on_dark"
android:showAsAction="always"/>
<item
android:id="@+id/menuIconAudio"
android:icon="@drawable/audio_light_on_dark"
android:showAsAction="always"/>
<item
android:id="@+id/menuIconVideo"
android:icon="@drawable/video_light_on_dark"
android:showAsAction="always"/>
<item
android:id="@+id/menuIconLearn"
android:icon="@drawable/ic_menu_learn"
android:showAsAction="always"/>
<item
android:id="@+id/menuIconIntro"
android:icon="@drawable/intro_pane"
android:showAsAction="always"/>
<item
android:id="@+id/menuIconLookItUp"
android:icon="@drawable/look_it_up"
android:showAsAction="always"/>
<item
android:id="@+id/menuIconRecall"
android:icon="@drawable/ic_menu_recall"
android:showAsAction="always"/>
You should be able to change the color of the text easily by using SpannableString
instead of String
- no need for dirty workarounds ;-) 您应该能够使用SpannableString
而不是String
轻松更改文本的颜色 - 不需要脏的变通办法;-)
SpannableString s = new SpannableString("My red MenuItem");
s.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
item.setTitle(s);
I have solved by changing the background color by code of menu by checking the device version. 我通过检查设备版本,通过菜单代码更改背景颜色来解决。
If device doen't support overflow menu, the, you can change the background color of menu as well as you can also change menu text color using following one: 如果设备不支持溢出菜单,则可以更改菜单的背景颜色,也可以使用以下方法更改菜单文本颜色:
static final Class<?>[] constructorSignature = new Class[] {Context.class, AttributeSet.class};
class MenuColorFix implements LayoutInflater.Factory {
public View onCreateView(String name, Context context, AttributeSet attrs) {
if (name.equalsIgnoreCase("com.android.internal.view.menu.ListMenuItemView")) {
try {
Class<? extends ViewGroup> clazz = context.getClassLoader().loadClass(name).asSubclass(ViewGroup.class);
Constructor<? extends ViewGroup> constructor = clazz.getConstructor(constructorSignature);
final ViewGroup view = constructor.newInstance(new Object[]{context,attrs});
new Handler().post(new Runnable() {
public void run() {
try {
view.setBackgroundColor(Color.GRAY);
List<View> children = getAllChildren(view);
for(int i = 0; i< children.size(); i++) {
View child = children.get(i);
if ( child instanceof TextView ) {
((TextView)child).setTextColor(Color.BLACK);
}
}
}
catch (Exception e) {
Log.i(TAG, "Caught Exception!",e);
}
}
});
return view;
}
catch (Exception e) {
Log.i(TAG, "Caught Exception!",e);
}
}
return null;
}
}
public List<View> getAllChildren(ViewGroup vg) {
ArrayList<View> result = new ArrayList<View>();
for ( int i = 0; i < vg.getChildCount(); i++ ) {
View child = vg.getChildAt(i);
if ( child instanceof ViewGroup) {
result.addAll(getAllChildren((ViewGroup)child));
}
else {
result.add(child);
}
}
return result;
}
//and in onCreateContextMenu, placed following code //并在onCreateContextMenu中放置以下代码
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
LayoutInflater lInflater = getLayoutInflater();
if ( lInflater.getFactory() == null ) {
lInflater.setFactory(new MenuColorFix());
}
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.myMenu, menu);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.