Android菜单详解——上下文菜单(ContextMenu )

1,长按菜单,就会弹出一个菜单,这个菜单就称为上下文菜单。上下文菜单不同于选项菜单,选项菜单服务于Activity,而上下文菜单则是注册到某个View对象上的。如果一个View对象注册了上下文菜单,用户可以通过长按该View对象以呼出上下文菜单。

2,ContextMenu创建方法:

a)首先给View注册上下文菜单registerForContextMenu()

b)添加上下文菜单内容onCreateContextMenu()

——可以通过代码动态添加;

——也可以加载xml文件中的菜单项;

c)设置菜单点击后响应事件onContextMenuItemSelected()

3,首先在布局文件中添加一个ListView:

<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
    
    <ListView
        android:id="@+id/lv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</RelativeLayout></span>

4,然后在MainActivity中设置ListView的显示内容和构造ListView的数据,还要在showListView()方法中给view注册上下文菜单:

   

<span style="font-size:18px;">  /*
     *1, 设置listview显示的内容
     */
    private void showListView() {

    ListView listView=(ListView) findViewById(R.id.lv);
    ArrayAdapter adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,getData());
    listView.setAdapter(adapter);
    //给view注册上下文菜单
        this.registerForContextMenu(listView);
}
    /*
     *2, 构造listview显示的数据
     */
    private ArrayList<String>getData(){
    ArrayList<String>list=new ArrayList<String>();
    for (int i = 0; i <5; i++) {
list.add("文件"+(i+1));
}
return list; 
}</span>

5,最后设置menu显示的内容以及设置菜单项的点击事件:

   

 <pre name="code" class="java"> /*
     * 3,设置menu显示的内容
     */
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
    ContextMenuInfo menuInfo) {
    
	    super.onCreateContextMenu(menu, v, menuInfo);
	    menu.setHeaderTitle("文件操作");
	    menu.setHeaderIcon(R.drawable.ic_launcher);
	    /*
	    * add方法中有四个参数(groupId,itemId,order,title)
	    *groupId为分组的Id,itemId为菜单项的Id,order为菜单排序,title为菜单项的文字描述
	    */
	    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(this, "点击复制", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "点击粘贴", Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(this, "点击剪切", Toast.LENGTH_SHORT).show();
			break;
		case 4:
			Toast.makeText(this, "点击重命名", Toast.LENGTH_SHORT).show();
			break;
		}
    	return super.onContextItemSelected(item);
    }

 


6,下面是MainActivity的完整代码:

<span style="font-size:18px;">public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //把listview显示出来
        showListView();      
    }
    /*
     *1, 设置listview显示的内容
     */
    private void showListView() {

    ListView listView=(ListView) findViewById(R.id.lv);
    ArrayAdapter adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,getData());
    listView.setAdapter(adapter);
    //给view注册上下文菜单
    this.registerForContextMenu(listView);
    }
    /*
     *2, 构造listview显示的数据
     */
    private ArrayList<String>getData(){
    ArrayList<String>list=new ArrayList<String>();
    for (int i = 0; i <5; i++) {
    	list.add("文件"+(i+1));
	}
    return list; 
    }
    /*
     * 3,设置menu显示的内容
     */
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
    ContextMenuInfo menuInfo) {
    
	    super.onCreateContextMenu(menu, v, menuInfo);
	    menu.setHeaderTitle("文件操作");
	    menu.setHeaderIcon(R.drawable.ic_launcher);
	    /*
	    * add方法中有四个参数(groupId,itemId,order,title)
	    *groupId为分组的Id,itemId为菜单项的Id,order为菜单排序,title为菜单项的文字描述
	    */
	    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(this, "点击复制", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "点击粘贴", Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(this, "点击剪切", Toast.LENGTH_SHORT).show();
			break;
		case 4:
			Toast.makeText(this, "点击重命名", Toast.LENGTH_SHORT).show();
			break;
		}
    	return super.onContextItemSelected(item);
    }
}</span>

7,上面的实例是通过代码动态添加菜单内容,也可以通过加载xml文件中的菜单项来添加菜单内容,在layout的menu中添加布局:

<span style="font-size:18px;"><menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/c"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="复制"/>
    <item
        android:id="@+id/v"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="粘贴"/>
    <item
        android:id="@+id/x"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="剪切"/>
    <item
        android:id="@+id/r"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="重命名"/>

</menu></span>

8,通过加载xml文件中的菜单项来添加菜单内容时,MainActivity中的代码只需修改两处:

第一:onCreateContextMenu方法中通过inflater来获取menu显示的内容:

ManuInflater  inflater=getMenuInflater();

inflater.inflate(R.menu.main,menu);

第二:在点击事件onContextItemSelected中,要把ItemId中的id改为menu中每个item对应的id。

9,实现结果:


  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android Studio中的上下文菜单是一种常见的用户界面元素,它可以在长按ListView或RecyclerView等视图组件时弹出。用户可以在上下文菜单中选择不同的操作,例如删除或编辑项目。以下是创建上下文菜单的步骤: 1. 在布局文件中添加ListView或RecyclerView等视图组件。 2. 在Activity中为该组件注册上下文菜单,使用registerForContextMenu()方法。 3. 重写onCreateContextMenu()方法,使用MenuInflater.inflate()方法加载菜单布局文件。 4. 重写onContextItemSelected()方法,根据用户选择的菜单项执行相应的操作。 下面是一个简单的示例代码,演示如何在Android Studio中创建上下文菜单: ```java public class MainActivity extends AppCompatActivity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = findViewById(R.id.list_view); registerForContextMenu(listView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.delete: // 执行删除操作 return true; case R.id.edit: // 执行编辑操作 return true; default: return super.onContextItemSelected(item); } } } ``` 在这个示例中,我们为ListView注册了上下文菜单,并在onCreateContextMenu()方法中加载了一个名为context_menu的菜单布局文件。在onContextItemSelected()方法中,我们根据用户选择的菜单项执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值