首先看看我们要做的效果:
点击选择项进入到ActionMode界面,如下:
android系统提供的菜单不能满足要求,我们需要自定义菜单,这里只需要建立普通的菜单就可以了,无需上下文菜单,即:
复写
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
//super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
该方法中利用main.xml布局文件,对item进行设置,main.xml文件内容:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/search"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/search"/>
<item
android:id="@+id/Multi_Select"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/multiselect"/>
<item
android:id="@+id/paste"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/paste"
android:visible="false"/>
<item
android:id="@+id/mode"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/show_list"/>
<item
android:id="@+id/create"
android:orderInCategory="100"
android:title="@string/create"
android:icon="@drawable/newfolder"
android:showAsAction="collapseActionView"/>
<item
android:id="@+id/setting"
android:orderInCategory="100"
android:title="@string/setting"
android:icon="@drawable/settings_actbar"
android:showAsAction="collapseActionView"/>
</menu>
配置ActionMode:
private ActionMode.Callback mMultiSelectAction = new ActionMode.Callback(){
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
handler = MutiSelectHandler.getInstance(MainActivity.this);
mode.setTitle(R.string.Multi_select_Options);
menu.add(0, 12, 0, R.string.del);
menu.add(0, 13, 0, R.string.copy);
menu.add(0, 14, 0, R.string.cut);
menu.add(0, 15, 0, R.string.share);
contentfragment details = (contentfragment)getFragmentManager().findFragmentByTag("content");
details.changeMultiSelectState(handler);
// setmActionModeSelected(true);
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
}
接下来在消息处理中mActionMode = startActionMode(mMultiSelectAction);
难度不大,只是我还没明白,ActionMode默认的格式和屏幕的分辨率有关系,例如本平板是1024*600的,它会从右到左显示4个。
进入ActionMode后,为什么显示的对号后面跟的是英文的DONE。难道是和模拟器的环境有关系?而我在平板上能否改换成“完成”中文字样,ActionMode的固定格式貌似你都无法改动。这又是属于什么样的设计呢?