AndroidStudio オプションメニュー


AndroidStudioでのアプリのオプションメニューについてまとめていきます。

オプションメニュー

オプションメニューとは、アクションバー(アプリバー)に表示されるメニューのことです。
アクションバーには、オプションメニューや、オーバーフローメニュー等を表示することが可能です。


参照

オプションメニューを表示する

オプションメニューを表示させるには、以下の手順を踏みます。

1,オプションメニュー用の.xmlファイルを作成する
2,.xmlファイルに専用タグを記述する
3,アクティビティにonCreateOptionsMenu()メソッドを実装する

1,オプションメニュー用の.xmlファイルを作成する

menuフォルダを右クリック>new>Menu Resouce File>OK

AndroidStudioではリソースファイル作成専用の機能があるので、利用する。

2,.xmlファイルに専用タグを記述する

menuタグ内に選択肢1つにつきitemタグを1つ記述します。
 itemタグには  
  ∟android:id
  ∟app:showAsAction
  ∟android:title
の3つの属性は必ず記述が必要

サンプルコード

menun.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menuListOptionTeishoku"
        app:showAsAction="never"
        android:title="@string/menu_list_options_teishoku"/>

    <item
        android:id="@+id/menuListOptionCurry"
        app:showAsAction="never"
        android:title="@string/menu_list_options_curry"/>

</menu>

android:id:R値として使用するid

app:showAsAction:アクションバーに表示させるかどうかの設定

showAsActionの属性値

属性値 内容
never その選択肢はオーバーフローメニューに格納される
always 常にアクションバーに表示される。ただし、alwaysとすると、画面サイズによっては若干表示がずれてしまうこともあるので、ifRoomの使用が推奨されている。
ifRoom アクションバーに表示する余裕がある場合は表示し、ない場合はオーバーフローメニューに格納する。

android:title:選択肢の表示文字列

Tips メニューの入れ子

オプションメニューは、itemタグ内にさらにmenu-itemタグの組み合わせを記述することで、選択肢を入れ子にすることができます。

3,アクティビティに``onCreateOptionsMenu()メソッドを実装する

サンプルコード

MainActivity.kt
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        //オプションメニュー用XMLファイルをインフレイト
        menuInflater.inflate(R.menu.menu_options_menu_list, menu)
        return true
    }

inflateメソッドの第1引数には、該当メニュー.xmlファイルのR値を指定する。

コンテキストメニュー

コンテキストメニューとは、リストビューなどを長押しした時に表示されるメニューのことです。

参照

コンテキストメニューを表示する

コンテキストメニューは、オプションメニューとほぼ同じ手順となっています。
以下の手順。

1,コンテキストメニュー用の.xmlファイルを作成する
2,.xmlファイルに専用タグを記述する
3,アクティビティにonCreateContextMenu()メソッドを実装する
4,onCreate()でコンテキストメニューを表示させる画面部品を登録する

1,コンテキストメニュー用の.xmlファイルを作成する

オプションメニューと同じです。

2,.xmlファイルに専用タグを記述する

こちらもオプションメニューとほぼ同じです。
しかし、showAsAction属性は使えません。

サンプルコード

menu_context_menu_list.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menuListContextInfo"
        android:title="@string/menu_list_context_desc" />
    <item
        android:id="@+id/menuListContextOrder"
        android:title="@string/menu_list_context_order" />

</menu>

3,アクティビティにonCreateContextMenu()メソッドを実装する

return句が不要です。

サンプルコード

MainActivity.kt
    //コンテキストメニュー
    override fun onCreateContextMenu(menu: ContextMenu, view: View,
        menuInfo: ContextMenu.ContextMenuInfo) {
        //親クラスの同名のメソッドの呼び出し。
        super.onCreateContextMenu(menu, view, menuInfo)
        //コンテキストメニュー用xmlファイルをインフレイト
        menuInflater.inflate(R.menu.menu_context_menu_list, menu)
        //コンテキストメニューのヘッドタイトルを設定
        menu.setHeaderTitle(R.string.menu_list_context_header)
    }

4,onCreate()でコンテキストメニューを表示させる画面部品を登録する

コンテクストメニューを表示するビュー、つまり、長押しを検知するビューをあらかじめ登録する必要がある。

MainActivity内のonCreate()メソッド内にregisterForContextMenu()メソッドを記述。
引数にはコンテキストメニューを表示させる画面部品を記述する。

registerForContextMenu(lvMenu)