画面のテキストを選択する時に、画面一番上に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;
}