まずはxmlでオプションメニューを2つ追加します
xmlリソースファイルでメニューを作成する
今回はitem1とitem2を設置しました
xmlファイルは
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item1" android:visible="true" android:enabled="true" android:title="item1" android:icon="@android:drawable/ic_menu_search"></item> <item android:id="@+id/item2" android:title="item2" android:visible="true" android:enabled="true" android:icon="@android:drawable/ic_menu_rotate"></item> </menu>
次にjavaソースですがmenuを作成するときは
onCreateOptionsMenuを使用しました
これはmenuが表示されるとき初回のみ実行されます
表示ごとに変更したい場合は
onPrepareOptionsMenuを使用します
これは表示される毎に実行されるためメニュー内容を動的に変更することができます
今回は初回表示時は2つのオプションメニューが表示されますがitem1を押すと
swがfalseに変化しitem1が非表示に、item2が選択不可になっています
package blog.test; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; public class TestActivity extends Activity { boolean sw; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sw=true;//swの初期状態を設定 } //オプションメニューを追加 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } /**onPrepareOptionsMenu は MENU ボタンを押したときに呼ばれる(毎回)**/ @Override public boolean onPrepareOptionsMenu(Menu menu){ if(sw ==false){ //item1を非表示にitem2を選択不能にします menu.findItem(R.id.item1).setVisible(false); menu.findItem(R.id.item2).setEnabled(false); } return true; } /**onOptionsItemSelected はメニュー項目を選択した時に自動的に呼ばれる**/ @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()){ /**item1を押したとき**/ case R.id.item1: Log.i("tag","item1が押されました"); sw=false; return true; } return false; } }setVisible(false)で非表示に(trueで表示)
setEnabled(false)で選択不可(trueで選択可能)にしています
最初は2つのitemが表示されますが・・・
item1を押すと・・・・
このように変化します
また今回は使用していませんがOptionsMenu関連メソッドは以下の通りです
public void closeOptionsMenu()
メニューを閉じます(閉じられていれば何もしません)
public boolean onCreateOptionsMenu(Menu menu)
メニュー生成時に呼び出されます(初回のみ)
public boolean onOptionsItemSelected(MenuItem item)
メニュー項目を通知します
public boolean onPrepareOptionsMenu(Menu menu)
メニューが表示される前に呼ばれます(毎回)
public void onOptionsMenuClosed (Menu menu)
メニューを閉じるときに呼ばれます(毎回)
public void openOptionsMenu()
メニューを開きます(開かれていたら何もしません)
スポンサードリンク