web-dev-qa-db-ja.com

Android:アプリケーションのメニューをカスタマイズします(例:背景色)

メニュー(電話のMENUボタンによってトリガーされるもの)をカスタマイズする方法(ある場合)はどのようなものですか。特に2つのことに興味があります。

  • 背景色を標準の薄い灰色から濃い灰色に変更する
  • メニュー項目の配置方法。 4つのアイテムがあり、それらは自動的に2x2に配置されますが、すべてを1行(1x4)に配置したいです。
19
znq

組み込みのメニューフレームワークではありません。

onKeyDown()または何かを介して)MENUボタンをインターセプトし、必要なものをレンダリングすることは歓迎されますが、ユーザーは、デバイス上の他のメニューと同じように見えることをユーザーが期待していることを覚えておいてください。

8
CommonsWare

独自のメニュークラスを作成しました。それはおそらくあなたが望むものではないかもしれませんが、うまくいけばあなたが始められるはずです。ここに私が公開した記事とソースコードへのダウンロード可能なリンクがあります。

http://www.codeproject.com/KB/Android/AndroidMenusMyWay.aspx

13
authorwjf

"onCreateOptionsMenu"メソッドを実装することもできます。これは通常、標準メニューを表示するために使用され、この場合は何でも表示できます。

私のゲームでは、メニューボタンが押されたときに[ゲームの一時停止]ダイアログボックスを表示するように実装しました...

4
alocaly

スタイルを使用します。これはAndroid 5.0で動作します

<style name="AppTheme" parent="Android:Theme.Material.Light">
    <item name="Android:colorPrimary">@color/primary</item>
    <item name="Android:actionOverflowMenuStyle">@style/PopupMenu.MyStyle</item>
</style>

<style name="PopupMenu.MyStyle" parent="Android:Widget.PopupMenu">
    <item name="Android:popupBackground">@drawable/actionbar_item_background</item>
</style>

...そしてドローアブルは通常のセレクターです

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@color/primary"/>
    <item Android:drawable="@color/highlighted" Android:state_pressed="true"/>
</selector>
3
Marco Bonechi

テーマのstyle.xmlの背景メニューの色

<item name="Android:panelFullBackground">@Android:color/darker_gray</item>
1
wdog

この答え は機能しますが、ActionBarSherlockを使用するとクラッシュしました。それでも、これを機能させるためのハックな回避策があります。

    // Black Vodoo! Do not try this at home.

    final LayoutInflater li = getLayoutInflater();

    final Class<LayoutInflater> clazz = LayoutInflater.class;

    try {
        final Field fieldSet = clazz.getDeclaredField("mFactorySet");
        fieldSet.setAccessible(true);
        fieldSet.setBoolean(li, false);

        li.setFactory(new Factory() {

            @Override
            public View onCreateView(final String name,
                    final Context context, final AttributeSet attrs) {
                if (name.equalsIgnoreCase("com.Android.internal.view.menu.IconMenuItemView")) {
                    try {
                        final LayoutInflater f = getLayoutInflater();
                        final View view = f.createView(name, null, attrs);
                        new Handler().post(new Runnable() {
                            @Override
                            public void run() {
                                // Set the text color
                                ((TextView) view).setTextColor(Color.WHITE);
                            }
                        });
                        return view;
                    } catch (final Exception e) {
                    }
                }
                return null;
            }
        });
    } catch (final Exception e) {
        e.printStackTrace();
    }
0
Kirill Rakhman