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
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