サーチ…


構文

  • inflater.inflate(menu.your_xml_file、menu);

パラメーター

パラメータ 説明
inflate(int menuRes, Menu menu) 指定されたXMLリソースからメニュー階層を膨張させます。
getMenuInflater () このコンテキストを持つMenuInflaterを返します。
onCreateOptionsMenu (Menu menu) アクティビティの標準オプションメニューの内容を初期化します。メニュー項目をメニューに配置する必要があります。
onOptionsItemSelected (MenuItem item) このメソッドは、オプションメニューの項目が選択されるたびに呼び出されます

備考

メニューについてもっと知るには、 これを読んでください。それが役に立てば幸い!

仕切り付きオプションメニュー

Androidにはデフォルトのオプションメニューがあり、いくつかのオプションがあります。より多くのオプションを表示する必要がある場合は、これらのオプションをグループ化して明快にすることが理にかなっています。オプションは、それらの間に仕切り(すなわち水平線)を置くことによってグループ化することができます。ディバイダを可能にするために、次のテーマを使用できます。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>
</style>
<style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
    <item name="android:divider">@color/black</item>
    <item name="android:dividerHeight">1dp</item>
</style>

テーマを変更することで、仕切りをメニューに追加することができます。

メニューにカスタムフォントを適用する

public static void applyFontToMenu(Menu m, Context mContext){
    for(int i=0;i<m.size();i++) {
        applyFontToMenuItem(m.getItem(i),mContext);
    }
}
public static void applyFontToMenuItem(MenuItem mi, Context mContext) {
    if(mi.hasSubMenu())
        for(int i=0;i<mi.getSubMenu().size();i++) {
            applyFontToMenuItem(mi.getSubMenu().getItem(i),mContext);
        }
    Typeface font = Typeface.createFromAsset(mContext.getAssets(), "fonts/yourCustomFont.ttf");
    SpannableString mNewTitle = new SpannableString(mi.getTitle());
    mNewTitle.setSpan(new CustomTypefaceSpan("", font, mContext), 0, mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    mi.setTitle(mNewTitle);
}

次にアクティビティで:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    applyFontToMenu(menu,this);
    return true;
}

アクティビティでのメニューの作成


独自のメニューを定義するには、プロジェクトのres/menu/ディレクトリ内にXMLファイルを作成し、次の要素を含むメニューを作成します。

  • <menu> :すべてのメニュー項目を保持するメニューを定義します。
  • <item> :メニュー内の単一項目を表すMenuItemを作成します。また、サブメニューを作成するためにネストされた要素を作成することもできます。

ステップ1:

独自のxmlファイルを次のように作成します。

res/menu/main_menu.xml

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/aboutMenu"
        android:title="About" />
    <item
        android:id="@+id/helpMenu"
        android:title="Help" />
    <item
        android:id="@+id/signOutMenu"
        android:title="Sign Out" />
</menu>

ステップ2:

オプションメニューを指定するには、あなたのアクティビティonCreateOptionsMenu()をオーバーライドします。

この方法では、メニューリソース(XMLファイルのres/menu/main_menu.xml定義されています)

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

ユーザがオプションメニューからアイテムを選択すると、システムはあなたのアクティビティのオーバーライドされたonOptionsItemSelected()メソッドを呼び出します。

  • このメソッドは、選択されたMenuItemを渡します。
  • メニュー項目(メニューリソースのres/menu/main_menu.xmlandroid:id attributeで定義されているgetItemId()の一意のIDを返すgetItemId()呼び出すことによって項目を識別できres/menu/main_menu.xml * /
 @Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.aboutMenu:
            Log.d(TAG, "Clicked on About!");
            // Code for About goes here
            return true;
        case R.id.helpMenu:
            Log.d(TAG, "Clicked on Help!");
            // Code for Help goes here
            return true;
        case R.id.signOutMenu:
            Log.d(TAG, "Clicked on Sign Out!");
            // SignOut method call goes here
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

ラッピング!

Activityコードは次のようになります。

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "mytag";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.aboutMenu:
                Log.d(TAG, "Clicked on About!");
                // Code for About goes here
                return true;
            case R.id.helpMenu:
                Log.d(TAG, "Clicked on Help!");
                // Code for Help goes here
                return true;
            case R.id.signOutMenu:
                Log.d(TAG, "User signed out");
                // SignOut method call goes here
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

自分のメニューがどのように表示されるかのスクリーンショット:

SampleMenuApp



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow