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つの属性は必ず記述が必要
####サンプルコード
<?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()メソッドを実装する
####サンプルコード
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属性は使えません。
###サンプルコード
<?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句が不要です。
###サンプルコード
//コンテキストメニュー
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)