0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AndroidStudio オプションメニュー

Last updated at Posted at 2021-06-16

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

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

appbar_sheets_2x.png
参照

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

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値を指定する。

#コンテキストメニュー
コンテキストメニューとは、リストビューなどを長押しした時に表示されるメニューのことです。
スクリーンショット 2021-06-16 15.07.30.png
参照

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

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)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?