简体   繁体   English

如何更改菜单项文本Android中的全息主题颜色?

[英]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.

相关问题 Android - 更改Holo主题默认蓝色 - Android - Change Holo theme default blue color 如何在 Android 中更改菜单项的文本颜色? - How to change the Text color of Menu item in Android? 主题中的Android菜单项文本颜色 - Android menu item text color in theme Theme.Holo.Light问题中的自动完成下拉项文本颜色 - Autocomplete dropdown item text color in Theme.Holo.Light issue 如何在Theme.AppCompat.Light.DarkActionBar主题中更改菜单项的文本颜色? - How to change the text color of a menu item in Theme.AppCompat.Light.DarkActionBar theme? 将android holo主题中的默认蓝色更改为橙​​色(或其他任何颜色) - Change default blue color in android holo theme to orange (or anything else) 如何使用Sherlock操作栏主题将溢出菜单项的文本颜色更改为其他颜色 - How to change the text color of the overflow menu item to a different color using Sherlock action bar theme 如何使用Holo主题更改Android中按钮的背景颜色? - How do you change the background color of a Button in Android using the Holo Theme? AlertDialog 主题:如何更改项目文本颜色? - AlertDialog Theme: How to change item text color? 使用“android:Theme.Holo.Light”时如何更改焦点EditText的颜色? - How to change the color of a focused EditText when using “android:Theme.Holo.Light”?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM