I am using Theme.Holo in my app.
I have customized my theme using following 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
and in 4.7 inch device, it is showing output(with white text color instead if #404040 color code)
Here, I am able to set the background color but, menu item text color is not changed in 4.7 inch device
in 4.7 inch device, i am not having overflow menu icon, I am opening this menu by pressing menu button.
How to set the text color same as 10 inch device?
Thanx in advance!!!
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 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
@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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With