バラエティに富んだメニューを(2) - もっとリッチでハッピィなメニューを
メニュー項目には、表示方法やアクセス方法をいろいろと指定する事ができる。
アイコンとショートカット・キー
オプションメニューのメニュー項目には、アイコンとショートカット・キーを指定する事ができる。
コンテキストメニューでは、どちらも使えない。(アンドロイドは日々進化しているので、将来的には使えるようになるのかも?)
アイコンの追加
アイコン付きのメニューを表示するには、setIconメソッドを使う。
ショートカット・キーの追加
ショートカットには、文字と数字のショートカットが存在する。
メニューにショートカットを追加するには、以下のメソッドを使う。
- setAlphabeticShortcut (char alphaChar)
文字のショートカットを追加する。 - setNumericShortcut (char numericChar)
数字のショートカットを追加する。 - setShortcut (char numericChar, char alphaChar)
文字と数字のショートカットの両方を一度に追加する。
数字のショートカットについては、正直なところどのようにしてアクセスするのか良くわからない。
次のように、setAlphabeticShortcutメソッドの引数に、数字を指定すればちゃんと動いてくれるが、
setNumericShortcutで指定しても反応してくれない。
ドキュメントには「This is the shortcut when using a 12-key (numeric) keyboard.」とある。
「12-key (numeric) keyboard」というハードウェアーに依存するのだろうか?
プログラム例
前回のメニュープログラム1を修正して、メニューにアイコンを表示する例を以下に示す。
メニュープログラム3(MenuSample1.java)
このプログラムを実行して、MENUキーを押すと以下のようにアイコンが表示される。
setIconメソッドの引数には、アンドロイドにあらかじめ用意されているアイコンを指定できる。
上記プログラムの33行目のように、 R.drawable クラスに定義されている定数で指定する。
どの定数がどのようなアイコンか、一覧で表示されているページ( Taosoftware- Android メニューアイコン)があるので、これを参照するとわかりやすい。
自作のアイコンを、表示する事もできる。
38行目では、当サイトのトレードマークである「ぼけナス」画像gudon.pngを指定している。
自作のアイコンの配置方法については、 「プロジェクトのファイルとxmlとリソース」の「アイコンを自前のものに換えてみる。」を参照。
また、メニューが表示されている時点でMENUキーを長押しすると、以下のようにショートカットキーが確認できる。
MenuItemクラスのメソッドのほとんどは自分自身のインスタンスを返すので、プログラム32行目から40行目までを修正して、 以下のようにメソッドを続けて記述する事もできる。
サブメニューの表示
オプションメニューには、サブメニューを表示する事ができる。
サブメニューの下に、さらにサブメニューを追加する事はできない。
また、コンテキストメニューには、サブメニューを使用する事はできない。
アイコンやショートカットは、サブメニューでは使用できないようだ。
サブメニューを使うには、MenuオブジェクトのaddSubMenuメソッドを使って、SubMenuオブジェクトを追加する。
その後に、追加したSubMenuオブジェクトにaddメソッドを使って、サブメニューに追加したいメニュー項目を追加する。
以下に、サブメニューのプログラムの例を示す。
メニュープログラム4(MenuSample4.java)
このプログラムを実行して、「MENUキー」→「File」を選択した時に表示される、サブメニューの画面を以下に示す。
チェックボックスメニューの表示
setCheckableメソッドを使用すると、チェックボックス付きのメニューを表示する事ができる。
メニュー項目がチェックボックス付きのメニューかどうかは、isCheckableメソッドで確認する事ができる。
しかし、チェックボックス付きのメニューは、オプションメニューの場合はサブメニューでないと表示できないようだ。
また、チェックボックス付きのメニューのチェックの状態を変更するには、setCheckedメソッドを使用する。
メニュー項目がチェックされているかどうかは、isCheckedメソッドで確認する事ができる。
通常、チェックボックス付きのメニュー項目を選択すると、 その次にメニューが表示される時にはチェックの状態が反転して表示される事を期待するものだが、 メニュー項目を選択しても自動的にはチェックの状態が反転されない。
チェックの状態を反転させるには、自前のコードを記述する必要がある。
以下に、チェックボックス付きのメニューのプログラム例を示す。
メニュープログラム11(MenuSample11.java)
このプログラムを実行して、「MENUキー」→「FontStyleサブメニュー」を選択すると、以下のようなチェックボックス付きのサブメニューが表示される。
また、ボタンを長押しすると、以下のようなチェックボックス付きのコンテキストメニューが表示される。
チェックボックス付きのメニューを選択すると、次回、メニューが表示される時にチェックの状態が反転して表示される。
これは、18,19行目でチェックボックスの状態を保持する変数を用意して、そチェックの状態を設定するように自前のコードを記述しているからである。
チェックの状態を反転させるためのコードは、オプジョンメニューとコンテキストメニューでは若干異なっている。
これは、オプジョンメニューではMenuオブジェクトが保持されているのに対して、コンテキストメニューでは表示するたびに新しくメニューを作成し直す事による。
このあたりのオプジョンメニューとコンテキストメニューのふるまいの違いについては、次回の「メニューに関するメソッドのあれこれ」を参照していただきたい。
また、グループIDを使ってメニュー項目を作成すると、チェックボックス付きのメニューを一括して操作したり、ラジオボタン付きのメニューを表示できるようになる。
これについてはメニューグループを参照していただきたい。