PopupMenuを使う
Android 3.0(Honeycomb)では新しいUIコンポーネントとしてPopupMenuが追加されました。
PopupMenuではその名の通り、メニュー項目がポップアップ状に表示されます。
PopupMenuの詳細な使い方は続きからご覧下さい。
レイアウトファイル
今回はボタンを押した際にPopupMenuが表示されるようにしてみます。
レイアウトファイルにはPopupMenu表示用のボタンを1つ配置しておきましょう。
res/layout/main.xml
1 2 3 4 5 6 7 8 9 10 | <? xml version = "1.0" encoding = "utf-8" ?> android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > < Button android:id = "@+id/PopupButton" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "PopupMenu" /> </ LinearLayout > |
メニュー項目の設定
次にPopupMenuに表示する項目を定義します。
res/menu/popup.xmlというファイルを作ります。
res/menu/popup.xml
1 2 3 4 5 | < item android:id = "@+id/item01" android:title = "item01" ></ item > < item android:id = "@+id/item02" android:title = "item02" ></ item > < item android:id = "@+id/item03" android:title = "item03" ></ item > </ menu > |
ソースコード
ソースコードですが、まずonCreateメソッドでPopupMenu用ボタンにクリック処理を割り当てます。
1 2 3 | // ポップアップメニュー用ボタンにクリック処理を割り当てる PopupButton = (Button) findViewById(R.id.PopupButton); PopupButton.setOnClickListener( this ); |
次にonClickメソッドです。以下のようなコードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | // ポップアップメニュー用ボタンのクリック処理 @Override public void onClick(View button) { // PopupMenuのインスタンスを作成 PopupMenu popup = new PopupMenu( this , button); // popup.xmlで設定したメニュー項目をポップアップメニューに割り当てる popup.getMenuInflater().inflate(R.menu.popup, popup.getMenu()); // ポップアップメニューを表示 popup.show(); // ポップアップメニューのメニュー項目のクリック処理 popup.setOnMenuItemClickListener( new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { // 押されたメニュー項目名をToastで表示 Toast.makeText(popupMenu. this , "Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show(); return true ; } }); } |
PopupMenuのインスタンスを作成したあと、先ほど定義したpopup.xmlをPopupMenuに割り当てます。
最後にpopup.showメソッドを呼び出すことによりPopupMenuが表示されます。
また、popup.setOnMenuItemClickListenerを使って、PopupMenuのメニュー項目をクリックした際に
押されたメニュー項目をToastで表示するようにしています。
(プレビュー版SDKで作成したサンプルプログラムの為、正式版SDKではAPI仕様が変更になる可能性があります)
About The Author
kseto
2 Comments