我创建了一个选项菜单,其中每个项目都是一个子菜单。 我的问题是,当我按下激活其中一个子菜单时,前景色几乎与背景相同,我无法找到如何更改它。 对网络的研究似乎表明没有简单的方法可以做到这一点,这对我来说非常令人惊讶。 此外,我不知道为什么默认情况下颜色与主菜单中的颜色相同,在白色背景上为黑色forground。
以下是我的相关代码:
// Create Options Menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return true;
}
// Process clicks on Options Menu items
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.optionmenu_start_new_game:
createStartNewGameDialog(this,"Start new game","This will reset all scores.");
return true;
case R.id.optionmenu_save_playerlist:
savePlayerListInPreferences();
return true;
case R.id.optionmenu_save_game:
createSaveGameDialog(this,"Save game","Enter game name:");
return true;
case R.id.optionmenu_open_game:
selectSavedGame();
return true;
case R.id.optionmenu_add_player:
createAddPlayerDialog(this,"New player","Enter name:");
return true;
case R.id.optionmenu_remove_all_players:
createDelAllPlayersDialog(this, "Remove players",
"Are you sure you want to suppress all players?" );
return true;
default:
return false;
}
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/optionmenu_game_mngt"
android:title="@string/game_mngt">
<menu>
<item
android:id="@+id/optionmenu_start_new_game"
android:title="@string/start_new_game"/>
<item
android:id="@+id/optionmenu_save_game"
android:title="@string/save_game"/>
<item
android:id="@+id/optionmenu_open_game"
android:title="@string/open_game"/>
</menu>
</item>
<item
android:id="@+id/optionmenu_player_mngt"
android:title="@string/player_mngt">
<menu>
<item
android:id="@+id/optionmenu_add_player"
android:title="@string/add_player"/>
<item
android:id="@+id/optionmenu_remove_all_players"
android:title="@string/remove_all_players"/>
<item
android:id="@+id/optionmenu_save_playerlist"
android:title="@string/save_playerlist"/>
</menu>
</item>
</menu>
答案 0 :(得分:0)
我和 Theme.AppCompat.Light.DarkActionBar 一样,尝试了几乎所有的样式。没有任何效果,最后我只使用了Spannable的变通方法来改变子菜单条目的文本颜色。
private void makeItemForegroundVisible(MenuItem item) {
SpannableStringBuilder test = new SpannableStringBuilder(item.getTitle());
test.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.abc_primary_text_material_light)), 0, item.getTitle().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
item.setTitle(test);
}
这就是诀窍,但显然不是最好的方法,我敢肯定。
答案 1 :(得分:0)
我刚刚遇到appcompat light dark action bar主题的另一个问题,令人惊讶的是,该问题的解决方案还修复了受影响设备上的子菜单问题:
<强> style.xml 强>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="actionBarWidgetTheme">@style/Theme.AppCompat</item>
</style>
答案 2 :(得分:0)
使用Theme.AppCompat.Light.DarkActionBar时我也遇到了这个问题,但是通过覆盖我的主题定义中的actionBarWidgetTheme解决了这个问题:
<style name="AppThemeDay" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item>
</style>
似乎Theme.AppCompat.Light.DarkActionBar存在此问题,但Theme.AppCompat.Light显示的菜单项相似,但没有出现问题。