基本步骤:
1、创建Menu
2、注册
3、创建ContextMenu:覆盖父类方法onCreateContextMenu
4、菜单项的操作:覆盖父类方法onContextItemSelected
5、为按钮设置上下文操作模式
一、创建Menu
1、在res文件夹中新建文件夹menu;
2、在menu文件夹中新建context.xml(文件名随意),文件内容如下,item就是menu菜单中的条目;
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/delete"
android:title="删除" />
<item android:title="重命名">
<menu>
<item
android:id="@+id/opera1"
android:title="操作1" />
<item
android:id="@+id/opera2"
android:title="操作2" />
</menu>
</item>
</menu>
二、注册
registerForContextMenu(findViewById(R.id.ctx_btn));
三、创建ContextMenu:覆盖父类方法onCreateContextMenu
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
四、菜单项的操作:覆盖父类方法onContextItemSelected
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.delete:
Toast.makeText(this,"删除",Toast.LENGTH_SHORT).show();
break;
case R.id.opera1:
Toast.makeText(this,"操作1",Toast.LENGTH_SHORT).show();
break;
case R.id.opera2:
Toast.makeText(this,"操作2",Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
五、为按钮设置上下文操作模式(可将步骤2、3、4代码注释)
【注:上下文操作模式是什么】
是ActionMode的一种系统实现,将用户的交互重点转到执行上下文操作来,当用户启动上下文操作模式时,在应用的顶部出现一个上下文操作栏,也就是我们常说的一个ActionBar,在这一个上下文操作栏里,会显示用户对于当前所要执行的各种操作
下面的操作显示结果:
1、实现ActiomMode CallBack
ActionMode.Callback cb=new ActionMode.Callback() {
//创建方法,在启动上下文操作模式时(startActionMode(Callback))调用
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
Log.d("TAG", "onCreateActionMode: 创建");
getMenuInflater().inflate(R.menu.context,menu);
return true;
}
//在创建方法后使用
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
Log.d("TAG", "onPrepareActionMode: 准备");
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Log.d("TAG", "onActionItemClicked: 点击");
switch (item.getItemId()){
case R.id.delete:
Toast.makeText(MainActivity.this,"删除",Toast.LENGTH_SHORT).show();//因为这是在一个内部类里
break;
case R.id.opera1:
Toast.makeText(MainActivity.this,"操作1",Toast.LENGTH_SHORT).show();
break;
case R.id.opera2:
Toast.makeText(MainActivity.this,"操作2",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
//上下文操作模式结束时被调用
@Override
public void onDestroyActionMode(ActionMode mode) {
Log.d("TAG", "onDestroyActionMode: 结束");
}
};
2、在view的长按事件中启动上下文操作模式
findViewById(R.id.ctx_btn).setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
startActionMode(cb);
return false;
}
});