Androidアプリ開発でよく使います。
アクションバーへのオプションメニュー実装
この方法はググればいくらでも出てきます。
でも僕はいちいちググりたくないし、
自分用に実装手順をメモしておこうと思います。
※ Android Studioでの手順
このページの目次
大前提としてmenuフォルダが必要です。
ないならresフォルダ内に作っておいてください。
▼ このようなmenuフォルダを作る
公式リファレンスでも「プロジェクトのres/menuディレクトリ内でXMLファイルを作成」と書いてあるし、menuという名前にするのは必須です。
ここまでは下準備の下準備
2.メニューのレイアウトXMLを作成する
先ほどのres/menuフォルダ内に作ります。
まずmenuフォルダを右クリックし、
そこから [New] = >[Menu Resouce File] をクリック
▼ 次のNew Resource Fileダイアログが現れる
メニュー名は menu.xml としてもいいけど工夫します。ここではMainActivityに対してオプションメニュー実装するので menu_main.xml という区別しやすい名前にしました。
そういうルールで問題ないと考えます。
ここではこんなオプションメニューを作ってみました。
- 常時表示のアイコンメニュー1つを表示
- その隣にドロップダウンメニュー表示
- ドロップダウンに子メニューが2つある
言葉で書くとやはり分かりにくい…
具体的にはこんなXMLコードになりました。
▼ menu_main.xmlの内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?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/save_item" android:title="Save" android:icon="@drawable/ic_save" app:showAsAction="always" /> <item android:id="@+id/settings_item" android:title="Settings" app:showAsAction="never"/> <item android:id="@+id/privacy_policy_item" android:title="Privacy policy" app:showAsAction="never" /> </menu> |
重要なのは showAsAction という属性です。
▼ この属性は以下のいずれかの値を持つ
- always
常時メニューアイテムを表示する。例えばアイコン(android:icon)が指定されていれば、アイコンだけが表示されるメニューとなる
- never
アクションバーにそのアイテムは表示されない。代わりに右端のオーバーフローメニューを開いたときにドロップダウン表示されるようになる
- ifRoom
アクションバーに表示するスペースがあれば表示し(= alwaysと同じ)、ない場合はオーバーメニューに格納する(=neverと同じ)
この属性がメニューの見た目にかなり影響します。
タイトル・アイコンは自由に設定してください。
4.Activity側でメニューアイテムを表示・制御
そしたらActivity側でオプションメニュー実装です。
端的には次2つをオーバライドします。
- onCreateOptionMenu
- onOptionsItemSelected
これはコードを見た方が早いです。
▼ Activity内で以下の2つを実装するコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
override fun onCreateOptionsMenu(menu: Menu): Boolean { /// レイアウトXMLからメニュー実装 val inflater: MenuInflater = menuInflater inflater.inflate(R.menu.menu_main, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { // 選択されたオプションメニューアイテム処理 return when (item.itemId) { R.id.save_item -> { /// なんか処理 true } R.id.settings_item -> { /// なんか処理 true } R.id.privacy_policy_item -> { /// なんか処理 true } else -> super.onOptionsItemSelected(item) } } |
この部分はあんまり言うことがありません。
作成したレイアウトXMLを onCreateOptionsMenu() を使ってActivityに実装し、タッチされたオプションメニューアイテムの処理を onOptionsItemSelected() でやってるだけです。
これでオプションメニューの実装は完了
5.実際のオプションメニューの見た目
こんな感じで表示できます。
▼ 初期状態でのオプションメニュー
▼ オーバーフローメニューを開いたとき
オプションメニューが付くとアプリっぽくなります(笑
見た目・アイコンを工夫するとよりグッドです。
オプションメニュー実装のまとめ
最後にここまでの手順を箇条書き
以上、Androidアプリへのオプションメニュー実装でした。
手順を踏んでいけば簡単にできます。ではまた