オプションメニュー
サンプルの基本部分が作成できたところで、これにオプションメニューを追加していきます。
オプションメニューとは
オプションメニューとは、アクションバーに表示されるメニューのことです。下図のように、アクションバーの右に点3個のアイコンが表示され、それをタップすると、選択メニューが表示される仕組みです。
この右端に表示される点3個のメニューを「オーバーフローメニュー」といいます。これをタップすると、定食とカレーを選択できるようになっており、それぞれを選択すると、選択されたメニューリストが表示されるように改造していきます。
xmlファイルの作成
オプションメニューそのものは、画面と同じようにxmlファイルに記述します。ただし、ファイルを入れるフォルダが違います。それを追加します。
resフォルダを右クリックし、[New]>[Android resource directory]を選択してください。以下のようなダイアログが表示されるので、「Resource type:」から「menu」を選択し、OKをクリックしてください。
これでres/menuフォルダが追加されました。メニューに関係するxmlファイルはこのフォルダ中に格納します。
次に、xmlファイルを作成します。menuフォルダを右クリックし、[New]>[Menu resource file]を選択してください。以下のようなダイアログが表示されるので、「File name:」に「menu_options_menu_list」を入力し、OKをクリックしてください。
menuタグが記述されたxmlファイルが作成されているはずです。
メニュー用のxmlファイルは、<menu>タグで始まり、この中に選択肢ひとつにつき<item>タグをひとつ記述してきます。今回は、選択肢が2個ですので、<item>タグを2個追加します。以下のソースコードを<menu>タグ内に記述してください。
<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>
[Note]xmlns:app属性のインポート
<menu>開始タグのxmlns:app属性は最初は記述されていません。<item>タグのapp:showAsAction属性を記述する際にappが赤文字で表示され、下図のようなメッセージが表示されるはずです。
その時に、メッセージ通りに「Alt+Enter」を入力すると、自動でインポートしてくれます。
<item>タグを記述する際、上記3個の属性、すなわち、android:id、app:showAsAction、android:titleは必ず記述する必要があります。それぞれ、以下に説明します。
- idは画面部品と同じくR値として使用するidです。
- app:showAsActionはアクションバーに表示させるかどうかの設定です。「never」とすると、その選択肢はオーバーフローメニューに格納されます。「always」とすると、常にアクションバーに表示されます。ただし、「always」とすると、画面サイズによっては狭いアクションバー内に選択肢がひしめくことになるので、Androidとしては、「ifRoom」を推奨しています。これは、アクションバーに表示する余裕がある場合は表示し、ない場合はオーバーフローメニューに格納するようになります。
- android:titleは選択肢の表示文字列です。
[Note]app:showAsActionとandroid:showAsAction
<item>タグのshowAsAction属性は、app:とandroid:の2種があります。これは、アクティビティクラスの継承元クラスによって変わってきます。
通常のActivityを継承する場合はandroid:を使用し、AppCompatActivityを継承する場合はapp:を使用します。
他に、アイコンを指定する「android:icon」属性もあります。オプションメニューの特徴として、android:icon属性が指定されている選択肢の場合、アクションバーに表示させる場合はアイコンのみが表示され、逆にオーバーフローメニューに格納された場合はタイトル文字列しか表示されません。
[Note]メニューの入れ子
オプションメニューは、<item>タグ内にさらに<menu>-<item>タグの組合せを記述することで、選択肢を入れ子にすることができます。