[Android]コンテキストメニューを表示する。 | 妄想プログラマのらくがき帳

2013年8月5日月曜日

[Android]コンテキストメニューを表示する。

コンテキストメニューとはViewを長押ししたときに表示されるフローティングメニューです。

コンテキストメニューを表示するには、まずメニューを定義します。
メニュー定義の方法はこちら→「オプションメニューを表示する。その1。」

今回はcontext_menu_sample.xmlというファイル名で以下のようなメニューを定義しました。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/menu1" android:title="menu1" ></item>
    <item android:id="@+id/menu2" android:title="menu2" ></item>
    <item android:id="@+id/menu3" android:title="menu3" ></item>
    <item android:id="@+id/menu4" android:title="menu4" ></item>
</menu>

次にコード上でコンテキストメニューの表示とメニュー項目選択時の処理を記述します。
おおまかな処理の流れは、
1. Activity.registerForContextMenu()でコンテキストメニューを表示するViewを登録
2. Activity.onCreateContextMenu()でメニューを作成
3. Activity.onContextItemSelected()でメニュー項目が選択されたときの処理を行う
です。
public class ContextMenuSampleActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_context_menu_sample);

        // registerForContextMenu()でコンテキストメニューを表示するViewを登録
        TextView textView = (TextView) findViewById(R.id.editText);
        registerForContextMenu(textView);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        // registerForContextMenu()で登録したViewが長押しされると、
        // onCreateContextMenu()が呼ばれる。ここでメニューを作成する。
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.context_menu_sample, menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // コンテキストメニューで項目が選択されるとonContextItemSelected()が呼ばれる。
        switch (item.getItemId()) {
            case R.id.menu1:
                Toast.makeText(this, "menu1 selected.", Toast.LENGTH_LONG).show();
                return true; // 処理に成功したらtrueを返す
            default:
                return super.onContextItemSelected(item);
        }
    }
}
このサンプルではテキストビューにコンテキストメニューを設定しています。

実際に動かしてみます。テキストビューを長押しすると、以下のようなメニューが表示されます。

0 件のコメント:

コメントを投稿