【问题标题】:Android change menu item Text color dynamicallyAndroid动态更改菜单项文本颜色
【发布时间】:2017-10-25 17:04:18
【问题描述】:

我正在尝试动态更改菜单项文本颜色。

我有一个适用于菜单图标的解决方案,它使用如下颜色过滤器:

Drawable drawable = menuItem.getIcon();

        if (drawable != null) {
            drawable.mutate();
            drawable.setColorFilter(new
                    PorterDuffColorFilter(Color.parseColor(color), PorterDuff.Mode.MULTIPLY));
        }
        menuItem.setIcon(drawable);

输出:

我无法更改菜单项文本的颜色。为了完成这项工作,我使用了以下代码:

 SpannableString s = new SpannableString(menuItem.getTitle());
                s.setSpan(new ForegroundColorSpan(Color.parseColor(color)), 0, s.length(), 0);
                menuItem.setTitle(s);

输出:

“SAVE”的颜色是我想要改变的。

谁能帮我解决这个问题?

【问题讨论】:

    标签: android menu menuitem


    【解决方案1】:

    添加菜单样式

    <style name="optionMenuTextApearance" parent="@style/Theme.Sherlock.Light">
        <item name="actionMenuTextColor">@color/white</item>
        <item name="android:actionMenuTextColor">@color/white</item>
    </style>
    

    在菜单中调用它

    <item name="android:itemTextAppearance">@style/optionMenuTextApearance</item>
    

    运行时更改菜单颜色

     @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        boolean result = super.onPrepareOptionsMenu(menu);
        styleMenuButton();
        return result;
    }
    
    private void styleMenuButton() {
        // Find the menu item you want to style
        View view = findViewById(R.id.YOUR_MENU_ITEM_ID_HERE);
    
        // Cast to a TextView instance if the menu item was found
        if (view != null && view instanceof TextView) {
            ((TextView) view).setTextColor( Color.BLUE ); // Make text colour blue
        }
    }
    

    【讨论】:

    • 有没有办法从 java 代码中指定文本颜色,而不是在 XML 中指定?例如,我在 style/XML 中指定 actionMenuTextColor = white 并希望在运行时将其更改为活动中的 RED。该怎么做?
    • 我想更改活动中“保存”菜单项的颜色,如下所示:@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_done, menu); MenuItem saveMenuItem = menu.findItem( R.id.action_done); // I want to change saveMenuItem text return super.onCreateOptionsMenu(menu); }
    • 查看视图 = findViewById(R.id.YOUR_MENU_ITEM_ID_HERE);总是返回 null。
    【解决方案2】:

    试试这个,

    在样式中添加此主题。

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">    
        <item name="actionMenuTextColor">@color/text_color</item>    
    </style>
    

    并将主题应用到工具栏

     android:theme="@style/AppTheme"
    

    【讨论】:

    • 有没有办法从 java 代码中指定文本颜色,而不是在 XML 中指定?例如,我在 style/XML 中指定 actionMenuTextColor = white 并希望在运行时将其更改为活动中的 RED。该怎么做?
    • 检查这个stackoverflow.com/questions/8614293/…希望它对你有帮助。
    【解决方案3】:

    您应该在菜单项上设置 SpannableString。 在构建 SpannableString 后添加以下行:

    menuItem.setTitle(s);
    

    由于您的 menuItem.getTitle() 仅提供用于制作 SpannableString 的字符串值,而不是作为菜单项标题的引用。

    【讨论】:

    • 我必须更改菜单项文本颜色而不是操作栏标题颜色。
    • @PrashantKawtikwar 抱歉,我很困惑,请尝试编辑后的答案。
    • 你把你的代码放在onCreateOptionsMenu了吗?您应该重写该方法以更改菜单。
    • 是的。我在onCreateOptionsMenu方法中写了代码。
    • 这听起来很奇怪。你的 xml 布局是什么样子的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2011-03-31
    • 2017-03-18
    • 1970-01-01
    • 2013-10-04
    相关资源
    最近更新 更多