Android长按进入上下文菜单

本文介绍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);
}

参考文章

Android开发长按菜单上下文菜单

2.6.2 菜单(Menu)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值