メニュー表示の動的変更
メニューを動的変更する例として
アプリが編集モードになったときなどには
メニューを隠したり、切り替えをする
メニュー表示を変更するには
Activityクラスの
invalidateOptionsMenu()
を使う
まずは、通常どおりにメニューを作成する
これは、レイアウトファイルなので
res/menu/
の直下へ作成する
<menu xmlns:android="http://scheams.android.com/apk/res/android"> <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="検索" android:showAsAction="ifRoom|withText"/> </menu>
これでメニューの作成
ちなみに、
showAsAction=””
は、|で複数パターンの指定が可能
復習すると
ifRoom
ActionBarの領域に余裕があるなら
表示
withText
余裕があって表示できたら文字も表示
となる
つまり、
showAsAction=”ifRoom|withText”
なので
画面が小さくて表示できないなら
メニューボタンへ格納
そうでないならメニューアイコンと文字を表示
としている
次に、JavaでActivityの定義
mSwitch = (Switch)findViewById(R.id.searchMode); mSwitch.setOnCheckedChangeListener(this);
次は、メニューの書き換え
メニューをクリックしたタイミングで
invalidateOptionsMenu()
を実行することで、メニューの書き換えをする
invalidateOptionsMenu()が実行されると
Activityの
onCreateOptionsMenu()
と
onPrepareOptionsMenu()
が再実行され
画面の状況に応じて
MenuItemが書き換えられる
ソースは
@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.dynamic_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public void onCheckedChanged(CompoundButton v , boolean isChecked){ int id = v.getId(); if(id == R.id.searchMode){ invalidateOptionsMenu(); } } @Override public boolean onPrepareOptionsMenu(Menu menu){ MenuItem search = menu.findItem(R.id.action_search); search.setVisible(mSwitch.isChecked()); return super.onPrepareOptionsMenu(menu); }
となる