タイトルだと解りにくいと思いますが、
アンドロイド本体に付いているメニューボタン(ハードウェアボタン)を押した時に表示するメニューを設定する方法を紹介します。
onCreateOptionsMenuメソッドでメニュー項目を設定する
Activityの中にonCreateOptionsMenuメソッドを作成します。
Menuクラスのaddメソッドを使い表示するメニュー項目を追加します。
public boolean onCreateOptionsMenu( Menu menu ){ //項目の設定 menu.add( 【メニューのグループ】,【メニューのID】,【メニューのソート順】, 【表示する文字列】 ); return super.onCreateOptionsMenu(menu); }
addメソッドの引数で
・グループ
・ID
・ソート順
・表示する文字列
を指定します。
メニューボタンを押された時の処理をonOptionsItemSelectedメソッドの中に書く
ボタンが押された時はonOptionsItemSelectedメソッドが呼び出されます。
MenuItemクラスのgetTitleでボタンの項目名、getItemIdでボタンのIDが取得できます。
あとはIDを調べてswitch文なりif文なりで分岐すればボタンが押された時の処理が実装できますね。
public boolean onOptionsItemSelected( MenuItem mi ){ switch( mi.getItemId() ){ case 0: 【ボタンID:1が押された時の処理】 break; case 1: 【ボタンID:2が押された時の処理】 break; } return true; }
サンプルプログラム
メニューボタンを3つ表示させるサンプルプログラムです。
※importは省略
public class Sample20120805Activity extends Activity { TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout ll = new LinearLayout(this); setContentView(ll); tv = new TextView(this); tv.setText("MENUボタンを押して名前を選択して下さい"); ll.addView(tv); } //メニュー作成 public boolean onCreateOptionsMenu( Menu menu ){ //項目の設定 menu.add(Menu.NONE,0,0,"博麗霊夢"); menu.add(Menu.NONE,1,1,"霧雨魔理沙"); menu.add(Menu.NONE,2,2,"東風谷早苗"); return super.onCreateOptionsMenu(menu); } //メニューボタンが押された時 public boolean onOptionsItemSelected( MenuItem mi ){ String name = (String)mi.getTitle(); int id = mi.getItemId(); tv.setText("ID:" + id + "―" + name + "が選択されました。"); return true; } }
【実行結果】
余談ですが、
ITmediaのニュースによるとGoogle社から
Android 2.3まではハードウェアボタンとして提供されてきた「Menu」ボタンはAndroid 4.0には存在しない。GoogleはMenuという発想を捨て、ActionボタンおよびOverflowボタンに置き換えるよう開発者に勧める。
このような告知が出ているみたいです。
ソース元:http://www.itmedia.co.jp/news/articles/1201/27/news059.html
もうハードウェアボタンのメニューボタンはなくなってしまうそうですね。
Actionボタンという新しい方法が採用されるようです。