2012年03月08日

メニューを動的にカスタマイズする


オプションメニューを状況に合わせて変化させたいと思います
まずは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が表示されますが・・・
device33.png
item1を押すと・・・・
device34.png
このように変化します

また今回は使用していませんが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()
メニューを開きます(開かれていたら何もしません)
スポンサードリンク

posted by kenken at 13:47 | Comment(0) | TrackBack(0) | ウィジェット メニュー | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/256395235
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。