サイト移転のお知らせ:http://techbooster.org/に移転しました

PopupMenuが消えるときに処理を行う

11月 5, 2011   //   by kkato   //   ユーザインターフェース  //  No Comments

Android 3.0(Honeycomb)からメニュー項目がポップアップ状に表示されるPopupMenuが追加されました。

そのPopupMenuがAndroid4.0(ICS)で拡張されています。

3.0からの違い

  • inflateメソッドが追加され、Menu Resourceからコンテンツを生成することが可能になった
  • メニューが破棄された(消えた)ことを受け取るリスナーが追加された

PopupMenuの基本的な使い方は「PopupMenuを使う」を参照してください。

それでは続きでICSで拡張された内容を説明します。

MenuResouceからコンテンツを生成する

まずはMenuResouceを作成します。

サンプルではres/menu以下にpopup.xmlファイルを作成してMenuItemが3つ存在するメニューを準備しています。

■res/menu/popup.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/item31"
        android:title="MenuItem1"></item>

    <item
        android:id="@+id/item2"
        android:title="MenuItem2"></item>

    <item
        android:id="@+id/item3"
        android:title="MenuItem3"></item>
</menu>

ここまではHoneycombと同様です。ICSではPopupMenuクラスにinflateメソッドが追加されているのでこのメソッドでMenuResouceのIDを指定することでコンテンツを生成することができます。

サンプルのPopupMenuを生成している箇所を見てみましょう。5行目で先ほど準備したMenuResouce(popup.xml)からコンテンツを生成しています。

■src/MainActivity.java

// ボタンをアンカーとして指定して、PopupMenuクラスのインスタンスを生成する
PopupMenu popupMenu = new PopupMenu(getApplicationContext(), button);

// MenuResourceからコンテンツを生成する
popupMenu.inflate(R.menu.popup);

メニューが破棄された(消えた)ことを受け取る

ICSからPopupMeneクラスにsetOnDismissListenerメソッドが追加されPopupMenu.OnDismissListenerクラスを登録することができます。

PopupMenuが消える時にonDismissメソッドが呼ばれることで必要な処理を実行することが可能になります。Dialogクラスと同様ですね。

サンプルではPopupMenuが消える際にトーストを表示するようにしています。

■src/MainActivity.java

// OnDismissListenerを登録する
popupMenu.setOnDismissListener(new OnDismissListener() {

    // ポップアップメニューが消えた時に呼ばれる
    @Override
    public void onDismiss(PopupMenu menu) {
        Toast.makeText(getApplicationContext(), "Dismiss", Toast.LENGTH_SHORT).show();
    }
});

PopupMenuクラスにAndroid4.0(ICS)から追加されたメソッドのまとめ

以下の2つのメソッドが追加されました。

メソッド名内容
inflateMenuResouceのIDを指定してコンテンツを生成する
setOnDismissListenerPopupMenu.OnDismissListenerを登録して、PopupMenuが消える(破棄される)タイミングをハンドリングする

これらのメソッドを使うことで以下のことが可能になります。

  • MenuResuceのIDから簡単にコンテンツを生成すること
  • ポップアップメニューが消えるタイミングに処理を行う

関連する記事:

Sponsored Link

Comments are closed.

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です