Menuのオプションメニュー
5011 ワード
Androidには、オプションメニュー(optionMenu)、コンテキストメニュー(ContextMenu)、サブメニューの3つの形式があります.最も一般的なのはオプションメニューで、menuボタンをクリックすると対応するActivityの下部に表示されます.各Activityは、1つのMenuオブジェクトと一意のMenuオブジェクトを関連付けます.
1.Activityのメニューメカニズム(dialogと同様)
一、Activityにはメニューの管理を実現するメカニズムがあり、方法は以下の通りである.
1.public boolean onCreateOptionMenu(Menu menu)
この方法は、menuパラメータが表示されるメニューオプションであるメニューを初期化するために使用されます.trueを返すとmenuが表示され、falseは表示されません.このメソッドは、メニューの初期化時にのみ呼び出され、一度だけ呼び出されます.
2.public boolean onprepareOptionsMenu(Menu menu)
onCreateOptionsMenuが実行されると、メニューが表示される前に呼び出されます.メニューが作成されている場合は、メニューが表示されるたびに呼び出されます.trueを返すとmenuが表示され、falseは表示されません.この方法では、異なるメニューをロードするなど、メニューの内容を動的に変更できます.
3.public void onOptionsMenuClosed(Menu menu)
メニューが閉じるたびに呼び出され、メニューが閉じるにはmenuボタンが再度クリックされ、backボタンがクリックされたり、ユーザーがメニュー項目を選択したりする3つのケースがあります.
4.public boolean onOptionsItemSelected(MenuItem item)
メニュー項目がクリックされたときに呼び出される、すなわちメニュー項目の傍受方法.
二、オプションメニューの追加
オプションメニューはonCreateOptionMenuまたはonPrepareOptionsMenuメソッドで追加できます
この方法で追加:menu.add(int groupId,int itemId,int order,charsequence title).setIcon(drawable id)
add()メソッドの4つのパラメータは、次のとおりです.
1.グループ分けしないならMenuと書きます.NONE
2.ID,AndroidはこのIDに基づいて異なるメニューを特定し、通常はMenu.FIRSTはオフセット量基準とする.
3.順番、どのメニューが前にあるかはこのパラメータの大きさで決まります
4.テキスト、メニュー項目の表示テキスト
add()メソッドはMenuItemオブジェクトを返し、setIcon()メソッドを呼び出し、対応するMenuItemにIconを設定します.
三、レイアウトファイルの追加
getMenuInflater().inflate(R.menu.options_menu,Menu menu);
ActivityのgetMenuInflater()を呼び出してMenuInflaterを取得し、inflateメソッドを使用してレイアウトファイルで定義したメニューを2番目のパラメータに対応するmenuオブジェクトにロードします.
レイアウトファイル:
resディレクトリの下にmenuフォルダを作成し、レイアウトファイルを作成します:options_menu.xml
四、メニュー項目の傍受:
メニューのメニュー項目がクリックされると、onOptionsItemSelected(MenuItem item)がトリガーされます.
itemパラメータはクリックされたメニュー項目であり,この方法内でどのItemがクリックされたかを判断し,異なる操作を実現する必要がある.上(二、三)の2つの異なるメニューを追加する方法について、判断の方法には少し違いがありますが、本質は同じです.
1.コード追加メニューの判断方法
2.レイアウトファイル追加メニューの判断方法:
上記のコードのcase以降のint値をレイアウトファイルで定義したidに変更するだけでよい.例えば、case R.id.menu.setting: case R.id.menu_info:
以上の主な参考は以下のとおりです.http://www.linuxidc.com/Linux/2012-02/55500.htm
1.Activityのメニューメカニズム(dialogと同様)
一、Activityにはメニューの管理を実現するメカニズムがあり、方法は以下の通りである.
1.public boolean onCreateOptionMenu(Menu menu)
この方法は、menuパラメータが表示されるメニューオプションであるメニューを初期化するために使用されます.trueを返すとmenuが表示され、falseは表示されません.このメソッドは、メニューの初期化時にのみ呼び出され、一度だけ呼び出されます.
2.public boolean onprepareOptionsMenu(Menu menu)
onCreateOptionsMenuが実行されると、メニューが表示される前に呼び出されます.メニューが作成されている場合は、メニューが表示されるたびに呼び出されます.trueを返すとmenuが表示され、falseは表示されません.この方法では、異なるメニューをロードするなど、メニューの内容を動的に変更できます.
3.public void onOptionsMenuClosed(Menu menu)
メニューが閉じるたびに呼び出され、メニューが閉じるにはmenuボタンが再度クリックされ、backボタンがクリックされたり、ユーザーがメニュー項目を選択したりする3つのケースがあります.
4.public boolean onOptionsItemSelected(MenuItem item)
メニュー項目がクリックされたときに呼び出される、すなわちメニュー項目の傍受方法.
二、オプションメニューの追加
オプションメニューはonCreateOptionMenuまたはonPrepareOptionsMenuメソッドで追加できます
この方法で追加:menu.add(int groupId,int itemId,int order,charsequence title).setIcon(drawable id)
add()メソッドの4つのパラメータは、次のとおりです.
1.グループ分けしないならMenuと書きます.NONE
2.ID,AndroidはこのIDに基づいて異なるメニューを特定し、通常はMenu.FIRSTはオフセット量基準とする.
3.順番、どのメニューが前にあるかはこのパラメータの大きさで決まります
4.テキスト、メニュー項目の表示テキスト
add()メソッドはMenuItemオブジェクトを返し、setIcon()メソッドを呼び出し、対応するMenuItemにIconを設定します.
三、レイアウトファイルの追加
getMenuInflater().inflate(R.menu.options_menu,Menu menu);
ActivityのgetMenuInflater()を呼び出してMenuInflaterを取得し、inflateメソッドを使用してレイアウトファイルで定義したメニューを2番目のパラメータに対応するmenuオブジェクトにロードします.
レイアウトファイル:
resディレクトリの下にmenuフォルダを作成し、レイアウトファイルを作成します:options_menu.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:id="@+id/menu_setting"
4 android:title=" "
5 android:icon="@drawable/setting">
6 </item>
7 </menu>
四、メニュー項目の傍受:
メニューのメニュー項目がクリックされると、onOptionsItemSelected(MenuItem item)がトリガーされます.
itemパラメータはクリックされたメニュー項目であり,この方法内でどのItemがクリックされたかを判断し,異なる操作を実現する必要がある.上(二、三)の2つの異なるメニューを追加する方法について、判断の方法には少し違いがありますが、本質は同じです.
1.コード追加メニューの判断方法
1 public boolean onOptionsItemSelected(MenuItem item){ 2 switch(item.getItemId()// item itemId
3 { 4 case Menu.First: 5 ...... 6 break; 7 case Menu.First+1: 8 ...... 9 break; 10 default: 11 // ,
12 return super.onOptionsItemSelected(item); 13 } 14 // true ,
15 return true; 16
17 }
2.レイアウトファイル追加メニューの判断方法:
上記のコードのcase以降のint値をレイアウトファイルで定義したidに変更するだけでよい.例えば、case R.id.menu.setting: case R.id.menu_info:
以上の主な参考は以下のとおりです.http://www.linuxidc.com/Linux/2012-02/55500.htm