Android更改菜单项动态文本颜色

时间:2017-05-25 06:35:54

标签: android menu menuitem

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

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

Drawable drawable = menuItem.getIcon();

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

输出:enter image description here

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

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

输出:enter image description here

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

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

试试这个,

在风格中添加此主题。

 android:theme="@style/AppTheme"

并将主题应用于工具栏

{{1}}

答案 1 :(得分:0)

添加菜单样式

<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
    }
}

答案 2 :(得分:0)

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

menuItem.setTitle(s);

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