android - 以编程方式更改 MenuItem 文本颜色

标签 android android-actionbar

所以我有一个菜单项,定义为:

<item
    android:id="@+id/action_live"
    android:title="@string/action_live"
    android:orderInCategory="1"
    app:showAsAction="ifRoom|withText" />

它显示为文本,如下所示:

Screenshot 1

我想以编程方式更改“LIVE”文本颜色。找了一阵子,找到了一个方法:

全局定义:

private Menu mOptionsMenu;

和:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    mOptionsMenu = menu;
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

我愿意:

MenuItem liveitem = mOptionsMenu.findItem(R.id.action_live);
SpannableString s = new SpannableString(liveitem.getTitle().toString());
s.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
liveitem.setTitle(s);

但是什么也没发生!

如果我对溢出菜单的某个项目执行相同操作,它会起作用:

Screenshot 2

app:showAsAction="ifRoom|withText"项目是否有一些限制?有什么解决办法吗?

提前致谢。

最佳答案

这个聚会有点晚了,但我花了一段时间研究这个并找到了一个解决方案,它可能对其他尝试做同样事情的人有用。一些功劳归功于 Harish Sridharan 引导我朝着正确的方向前进。

您可以使用 findViewById(R.id.MY_MENU_ITEM_ID) 定位菜单项(前提是菜单已创建和准备好),并将其转换为 TextView Harish 建议的实例,然后可以根据需要设置样式。

public class MyAwesomeActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
    super.onCreate(savedInstanceState);

    // Force invalidatation of the menu to cause onPrepareOptionMenu to be called
    invalidateOptionsMenu();
}

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
        ((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_SP, 24); // Increase font size
    }
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    boolean result = super.onPrepareOptionsMenu(menu);
    styleMenuButton();
    return result;
}

}

这里的技巧是在 Activity 的 onCreate 事件中强制菜单无效(从而导致 onPrepareMenuOptions 比正常情况下更快地被调用)。在这个方法中,我们可以根据需要定位菜单项和样式。

关于android - 以编程方式更改 MenuItem 文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31713628/

相关文章:

Android ActionBar 溢出复选框样式

Android FTP 连接失败

android - 无法更改 ActionBar 的背景颜色

android - 自定义按钮示例不起作用

Android - 检测方向变化,但界面无响应

android - searchview 在 FIRST back press 上没有正确关闭(它只是失去了焦点)

android - 带有操作栏的相机预览

android - 带有自定义标题栏的操作栏

android - 无论哪个 Activity 或服务首先在 android 中运行,如何始终在 android 中运行某些代码?

android - 数据绑定(bind)传递带有特殊字符的 xml 元素