29

オーバーフローメニューの背景とテキストの色をカスタマイズしたいのですが。ハードウェアメニューボタンのないデバイスでは正常に動作しますが、ハードウェアメニューボタンのあるデバイスのスタイルを設定できません。スクリーンショットを参照してください。

GalaxyNexusのScrenshot GalaxyS3のスクリーンショット

私はこれらのスタイルを使用しています:

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> 
    <item name="android:actionMenuTextColor">@android:color/white</item>
</style>
<style name="settleup_PopupMenu" parent="@style/Widget.Sherlock.ListPopupWindow">
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_settleup</item>
</style>
4

6 に答える 6

26

私は問題を調べました。textColorまた、HWメニューキーを使用してAndroid>=4.0デバイスのオプションメニューを変更する方法はないようです。一次、二次、三次色を変更しても、テキストの色には影響しませんでした。
今頭に浮かぶ唯一の「解決策」は、JavaリフレクションAPIのかなり厄介な使用です。

ただし、Android> = 4.0 HWキーデバイスの下部オプションメニューの背景は、非HWキードロップダウンメニューの背景とは別に設定できます。

HW以外のキーのドロップダウンメニューのスタイルはすでに設定されています。非HWキーのドロップダウンメニューは、android:popupMenuStyle(およびpopupMenuStyle)によって定義されます。

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item> 
</style>

ただし、Android> = 4.0 HWキー下部オプションメニューの背景はandroid:panelBackground、テーマの項目で定義されています。

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="android:panelBackground">@drawable/mybackground</item>
</style>

Android> = 4.0 HWキーデバイスの下部オプションメニューのテキストの色を変更するのは問題があるように思われるので、この部分をデフォルトのスタイルのままにしておくことをお勧めします。

于 2013-01-23T03:13:06.660 に答える
6

AppCompatのテーマを掘り下げてきましたが、私が試したものは何でもtextColorは白のままです。私が今していることは、次のようにツールバーメニューを手動でポップアップすることです。

@Override
public boolean onKeyUp(int keycode, KeyEvent e) {
   switch (keycode) {
       case KeyEvent.KEYCODE_MENU:
           if ( getSupportActionBar() != null ) {
               getSupportActionBar().openOptionsMenu();

               return true;
           }
   }

   return super.onKeyUp(keycode, e);
}

メニューが開いているときにメニューボタンを押すと、魔法のようにメニューが閉じます。

とにかく醜い黒い下揃えのメニューが必要なのは誰ですか?

于 2015-06-08T16:29:47.860 に答える
4

以下のように、オーバーフローMenuItemでスタイルとテーマを適用できます。オーバーフローメニューはListViewなので、listviewに従ってテーマを適用できます。

以下のコードをstyles.xmlに適用します

<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
            <item name="android:actionBarWidgetTheme">@style/PopupMenuTextView</item>
            <item name="android:popupMenuStyle">@style/PopupMenu</item>
            <item name="android:listPreferredItemHeightSmall">40dp</item>
    </style>

    <!-- Change Overflow Menu ListView Divider Property -->
        <style name="PopupMenuListView" parent="@android:style/Widget.Holo.ListView.DropDown">
            <item name="android:divider">@color/app_navigation_divider</item>
            <item name="android:dividerHeight">1sp</item>
            <item name="android:listSelector">@drawable/list_selector</item>
        </style>

        <!-- Change Overflow Menu ListView Text Size and Text Size -->
        <style name="PopupMenuTextView" parent="@android:style/Widget.Holo.Light.TextView">
            <item name="android:textColor">@color/app_white</item>
            <item name="android:textStyle">normal</item>
            <item name="android:textSize">18sp</item>
            <item name="android:drawablePadding">25dp</item>
            <item name="android:drawableRight">@drawable/navigation_arrow_selector</item>
        </style>

        <!-- Change Overflow Menu Background -->
        <style name="PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow">
            <item name="android:popupBackground">@drawable/menu_overflow_bg</item>
        </style>
于 2014-11-06T10:38:12.667 に答える
3

AppCompatテーマの場合:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="actionBarPopupTheme">@style/HardwareOptionMenu</item>
</style>

<style name="HardwareOptionMenu" parent="ThemeOverlay.AppCompat.Dark">
    <item name="android:textColorSecondary">@color/white</item>
    <item name="android:colorBackground">@color/black</item>
</style>
于 2015-10-31T15:37:59.593 に答える
1

androidプレフィックスなしのアイテムも追加してみてください

<style name="Theme.settleup" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="android:popupMenuStyle">@style/settleup_PopupMenu</item>
    <item name="popupMenuStyle">@style/settleup_PopupMenu</item> 
    <item name="android:actionMenuTextColor">@android:color/white</item>
    <item name="actionMenuTextColor">@android:color/white</item>
</style>
<style name="settleup_PopupMenu" parent="@style/Widget.Sherlock.ListPopupWindow">
    <item name="android:popupBackground">@drawable/menu_dropdown_panel_settleup</item>
    <item name="popupBackground">@drawable/menu_dropdown_panel_settleup</item>
</style>
于 2013-01-07T09:26:39.640 に答える
1

右の画像からメニューのテキストの色を本当に変更する必要がある場合にできることは、次の「ハック」である可能性があります。

SpannableStringBuilder text = new SpannableStringBuilder();
        text.append("MenuItem1");
        text.setSpan(new ForegroundColorSpan(Color.WHITE), 0, text.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        menu.add(Menu.NONE, MENU_ITEM_1, Menu.NONE, null).setTitle(text);

私はそれが最もクリーンな方法ではないことに同意します(そのようなメニューがある各アクティビティで注意を払う必要があり、このロジックを使用して各メニュー項目のタイトルを変更する必要があるため、かなり醜いと思います)が、それは期待される結果。それがあなたを助けたかどうか私に知らせてください。

乾杯!

于 2013-01-29T12:09:21.067 に答える