选项菜单中的子菜单相同前景&背景颜色

时间:2014-12-20 09:17:07

标签: android-menu

我创建了一个选项菜单,其中每个项目都是一个子菜单。 我的问题是,当我按下激活其中一个子菜单时,前景色几乎与背景相同,我无法找到如何更改它。 对网络的研究似乎表明没有简单的方法可以做到这一点,这对我来说非常令人惊讶。 此外,我不知道为什么默认情况下颜色与主菜单中的颜色相同,在白色背景上为黑色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>

3 个答案:

答案 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显示的菜单项相似,但没有出现问题。