メニュー表示の動的変更

メニュー表示の動的変更

メニューを動的変更する例として
アプリが編集モードになったときなどには
メニューを隠したり、切り替えをする

メニュー表示を変更するには
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);
}

となる

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です