バラエティに富んだメニューを(5) - メニューグループ
Menuクラスには、同じメニューグループに属するメニュー項目に対して、一括して同じ操作をおこなうメソッドがいくつか用意されている。
メニューグループを操作するメソッド
メニューグループに対して、操作をおこなうメソッドを以下に示す。- void removeGroup(int groupId)
同じメニューグループに属するメニュー項目を、一括して削除する。 - void setGroupCheckable(int group, boolean checkable, boolean exclusive)
checkable引数をtrueに指定してこのメソッドを呼び出すと、 同じメニューグループに属するメニュー項目を一括して、チェックボックスやラジオボタンとして表示するように設定できる。
この時、exclusive引数がtrueの場合はチェックボックスが,falseの場合はグループ内のボタンが1つだけ選択されるラジオボタンが、表示される。
checkable引数がfalseの場合は、exclusive引数の値にかかわらず、常に通常のメニューが表示される。 - void setGroupEnabled(int group, boolean enabled)
enabled引数の値に応じて、同じメニューグループに属するメニュー項目を一括して、選択可能または選択不可に設定する。 - void setGroupVisible(int group, boolean visible)
visible引数の値に応じて、同じメニューグループに属するメニュー項目を一括して、表示または非表示に設定する。
setGroupEnabledメソッドとsetGroupVisibleメソッドの例
setGroupEnabledメソッドとsetGroupVisibleメソッドの、プログラムの例を以下に示す。
メニュープログラム7(MenuSample7.java)
「change GroupVisible」ボタンと「change GroupEnabled」ボタンにより、VisibleとEnabledがそれぞれボタンを押すたびに切りかわります。
setGroupCheckableメソッドによりメニューにチェックボックスとラジオボタンを表示する
「チェックボックスメニューの表示」で、 チェックボックス付きのメニューを表示できる事を紹介した。
setGroupCheckableメソッドを使うと、1つのメニュー項目だけでなくグループに属するメニュー項目を一括して、チェックボックスとして表示させる事ができる。
また、メニュー項目をラジオボタンとして表示させる事もできる。
以前に、「チェックボックス付きのメニューは、オプションメニューの場合はサブメニュー項目でないと表示できないようだ。」と述べたが、これはラジオボタンの場合も同じである。
setGroupCheckableメソッドにより、メニューにチェックボックスとラジオボタンを表示するプログラムの例を、以下に示す。
メニュープログラム8(MenuSample8.java)
このプログラムを実行して、オプションメニューよりFontColorを選択すると、以下のようなラジオボタンメニューが表示される。
オプションメニューよりFontStyleを選択すると、以下のようなチェックボックスメニューが表示される。
ボタンを長押ししてコンテキストメニューを表示すると、以下のようにラジオボタンとチェックボックスのメニューが表示される。
チェックボックスメニューやラジオボタンメニューを選択しても、そのままでは次に表示する時に、選択されたメニュー項目がチェックされた状態では表示されない。
onOptionsItemSelectedメソッドやonContextItemSelectedメソッド内で、 選択されたメニュー項目を記憶しておいて、メニューを再表示する際にその項目がチェックされるように設定するコードを、自前で記述する必要がある。
このプログラムでは、23,24,25行目でメニューの選択の状態を記憶する変数を定義して、初期状態で選択される値を指定している。
そしてメニュー項目が選択されると、この変数に保存してonPrepareOptionsMenuメソッドやonContextItemSelectedメソッドにて、 選択されたメニュー項目を再設定している。