ActionMode是临时占用actionBar的位置来展示菜单的一种实现菜单的方式
创建方法:
- 1.在res/menu/下创建一个menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_mode1"
android:icon="@drawable/color"
android:orderInCategory="1"
android:title="mode1"/>
<item
android:id="@+id/action_mode2"
android:icon="@mipmap/ic_launcher_round"
android:orderInCategory="2"
android:title="mode2"/>
</menu>
- 2.创建一个类MyActionModeCallback来实现ActionMode.CallBack的方法
public class MyActionModeCallBack implements android.view.ActionMode.Callback {
//系统开始创建actionMode的时候调用
@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.action_mode, menu);
return true;
}
//系统开始渲染actionmode的窗体之前调用
@Override
public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
return false;
}
//当actionMode中menu的item点击时调用
@Override
public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
mode.finish()//关闭ActionMode的方法
return true;
}
}
//actionMode退出的时候调用
@Override
public void onDestroyActionMode(android.view.ActionMode mode) {
mode=null;
}
}
- 3.开启和退出actionMode
ActionMode mActionMode = startActionMode(myActionModeCallBack);//将上面实现了回调接口的类传递进去
mActionMode.finish();//退出actionMode会调用onDestroyActionMode()
- 4.为listView或者GridView 等absListView 类注册开启ActionMode
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
listView.setMultiChoiceModeListener(new ListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
//业务逻辑(更新menu的Item标题等等)
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.action_mode, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
//actionMode中menu的item点击事件的逻辑
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});