本文介绍android中长按某个view弹出上下文菜单的方法。
1. 在xml中写一个view,可以是Button,Textview等
<Button
android:id="@+id/menubutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="MEMU"/>
2. 在onCreate()给这个view控件注册上下文菜单
Button menuButton = (Button)findViewById(R.id.menubutton);
//注册按钮为上下文菜单
registerForContextMenu(menuButton);
3. 重写上下文菜单的创建方法
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
@Override
//重写上下文菜单的创建方法
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
//设置Menu显示内容
menu.setHeaderTitle("文件操作");
//menu.setHeaderIcon(R.drawable.ic_launcher);
menu.add(1,1,1,"复制");
menu.add(1,2,1,"粘贴");
menu.add(1,3,1,"剪切");
menu.add(1,4,1,"重命名");
}
4. 重定义上下文菜单被长按时触发的方法
@Override
//上下文菜单被点击时触发该方法
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case 1:
Toast.makeText(MainActivity.this,"点击复制",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this,"点击粘贴",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this,"点击剪切",Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this,"点击重命名",Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
5. menu.add()方法的参数
第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
第四个String类型的title参数,表示选项中显示的文字。
6. 在一个Activity中创建多个上下文菜单的方法
方案:这个方法是动态地更改选项菜单。创建几个上下文菜单,在onCreateContextMenu 来定义它们。这个方法接view控件作为参数,可以通过判断该控件的ID来区别点击不同的控件。例子如下:
@Override
//重写上下文菜单的创建方法
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
//设置Menu显示内容
if(v.getId() == R.id._234gfixantbutton) {
menu.setHeaderTitle("234G固定天线设置");
menu.add(1, 1, 1, "固定上天线");
menu.add(1, 2, 1, "固定下天线");
menu.add(1, 3, 1, "固定MIMO上天线");
menu.add(1, 4, 1, "固定MIMO下天线");
}else if(v.getId() == R.id.nr5gfixantbutton){
menu.setHeaderTitle("NR5G固定天线设置");
menu.add(1, 5, 1, "5G固定上天线");
menu.add(1, 6, 1, "5G固定下天线");
menu.add(1, 7, 1, "5G固定MIMO上天线");
menu.add(1, 8, 1, "5G固定MIMO下天线");
}
}
@Override
//上下文菜单被点击时触发该方法
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case 1:
Toast.makeText(MainActivity.this,"点击固定上天线",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this,"点击固定下天线",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this,"点击固定MIMO上天线",Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(MainActivity.this,"点击固定MIMO下天线",Toast.LENGTH_SHORT).show();
break;
case 5:
Toast.makeText(MainActivity.this,"5G点击固定上天线",Toast.LENGTH_SHORT).show();
break;
case 6:
Toast.makeText(MainActivity.this,"5G点击固定下天线",Toast.LENGTH_SHORT).show();
break;
case 7:
Toast.makeText(MainActivity.this,"5G点击固定MIMO上天线",Toast.LENGTH_SHORT).show();
break;
case 8:
Toast.makeText(MainActivity.this,"5G固定MIMO下天线",Toast.LENGTH_SHORT).show();
break;
}
return super.onContextItemSelected(item);
}
参考文章