Androidのoptions menuまわりのtips
2014-11-28
QiitaJavaAndroid- ActionBar メニューの表示/非表示を切り替える
- Fragment にメニューを表示させる
ActionBar メニューの表示/非表示を切り替える
概要
ActionBarActivity
な Activity の ActionBar にあるメニュー(options menu)について、
MenuItem item = menu.findItem(R.id.menu_id);
item.setVisible(false);
をしても消えてくれなかった options menu を何とかして消す
やり方
activity
// 初期状態ではmenuを表示させる
private boolean menuVisible = true;
private MenuItem menuToggleVisible;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_activity, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menuToggleVisible = menu.findItem(R.id.menu_toggle_visible);
menuToggleVisible.setVisible(menuVisible);
return true;
}
private void toggleMenuVisible() {
menuVisible != menuVisible;
invalidateOptionsMenu();
}
このようにonPrepareOptionsMenu
の中でsetVisible
を呼び出せるようにしておく
そして、invalidateOptionsMenu()
によって内部でonPrepareOptionsMenu
が call され、
menu の表示/非表示が切り替えられる
参考
Fragment にメニューを表示させる
Activity の上に乗せた Fragment ごとに menu を表示させたい
やり方
fragment
private MenuItem menuItem;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
// ...
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
super.onCreateOptionsMenu(menu, menuInflater);
// menu.add(groupId, itemId, order, title);
menuItem = menu.add(Menu.NONE, 0, 100, getString(R.string.menu_item));
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
まずonCreate
でsetHasOptionsMenu(true)
を call しておく
そして、onCreateOptionsMenu
で options menu を作成する
ここでは Java だけで menu を作成している
参考
from: https://qiita.com/petitviolet/items/da5a686556e65a9b5d9a