LoginSignup
2
2

More than 5 years have passed since last update.

ActionModeのメニューを動的に追加

Last updated at Posted at 2016-04-27

画面のテキストを選択する時に、画面一番上にActionModeのメニューが表示される。
例えば、入力テキス枠に、文字をタップして、選択すると、「コピー」、「共有」などのメニューアイテムが出てくる。

この辺のメニューがAndroidのOS上でデフォルトで表示されるものだが、実は、カスタマイズすることも可能である。

方法1

  独自のメニューxmlを用意して、それを丸ごとに使う。

方法2

  デフォルトで表示されるメニューの一部を変更する。

今回は、独自のメニューを追加したいだけなので、方法2で実装する。

実装

1.Menuレイアウトを定義する

menu_action_mode.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_menu_item_search"
        android:icon="@android:drawable/ic_menu_search"
        android:onClick="onActionItemClicked"
        android:title="@string/action_menu_item_search"
        app:showAsAction="always">
    </item>
    <item
        android:id="@+id/action_menu_item_save"
        android:icon="@android:drawable/ic_menu_save"
        android:onClick="onActionItemClicked"
        android:title="@string/action_menu_item_save"
        app:showAsAction="always">
    </item>
</menu>

2.自分のActivityクラスのonActionModeStartedメソッドを実装する

    @Override
    public void onActionModeStarted(ActionMode mode) {
        if (actionMode == null) {
            actionMode = mode;
            Menu menu = mode.getMenu();

            // 独自のメニューアイテムを追加する
            mode.getMenuInflater().inflate(R.menu.menu_action_mode, menu);
        }

        super.onActionModeStarted(mode);
    }

3.自分のActivityクラスにonActionItemClickedを実装する

  onActionItemClickedが上記1でandroid:onClickに指定されたメソッドである。

    public boolean onActionItemClicked(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_menu_item_search:
                Intent intent = new Intent(this, Main2Activity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                break;
            default:
                // This essentially acts as a catch statement
                return false;
        }

        actionMode.finish();
        return true;
    }
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2