Android使用上下文菜单ContextMenu

触发条件

上下文菜单的拥有者是View,用户每一次长按View时被调用,而且View必须已经注册了上下文菜单。

创建和响应上下文菜单步骤

1.为一个view注册上下文菜单:registerForContextMenu(View view)
2.生成上下文菜单,重写方法:onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
3.点击菜单选项,重写响应方法:onContextItemSelected(MenuItem item)

Demo

简单写了个demo,满足基本功能:
这里写图片描述
1.注册上下文,显示列表
布局就一个Listview,不再贴了~
MainActivity

public class MainActivity extends Activity {
    private ListView lvFiels;
    private String[] files;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lvFiels = (ListView)findViewById(R.id.lv_file);
        showFileList();

        //注册上下文菜单
        registerForContextMenu(lvFiels);
    }
    private void showFileList() {
        files = new String[]{"文件1","文件2","文件3","文件4"};
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_expandable_list_item_1, files);
        lvFiels.setAdapter(adapter);    
    }
}

2.生成上下文菜单
先自定义一个menu菜单:file_menu.xml,放在res/menu文件夹下。
file_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/copy" android:title="@string/menu_copy" />
    <item android:id="@+id/cut" android:title="@string/menu_cut" />
    <item android:id="@+id/delete" android:title="@string/menu_delete" />
    <item android:id="@+id/rename" android:title="@string/menu_rename" />
</menu>

MainActivity:重写onCreateContextMenu方法

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    getMenuInflater().inflate(R.menu.file_menu, menu);

    //获取点击listview位置
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
    String titleString = files[info.position];

    //设置标题
    menu.setHeaderTitle(titleString);
}

3.响应上下文菜单点击
MainActivity:重写onContextItemSelected方法

@Override
public boolean onContextItemSelected(MenuItem item) {
    //获取点击listview位置
    //AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    //int position = info.position;

    switch (item.getItemId()) {
        case R.id.copy:
            //do something
            Toast.makeText(this, "copy", Toast.LENGTH_SHORT).show();
            return true;
        case R.id.cut:
            //do something
            return true;
        case R.id.rename:
            //do something
            return true;
        case R.id.delete:
            //do something
            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Studio中实现上下文菜单的步骤如下: 1. 在布局文件中添加ListView组件,并设置其长按监听器。 2. 在Activity中重写onCreateContextMenu()方法,创建上下文菜单。 3. 在Activity中重写onContextItemSelected()方法,处理上下文菜单的点击事件。 4. 在Activity中注册上下文菜单使用registerForContextMenu()方法将ListView组件与上下文菜单关联起来。 以下是一个示例代码,演示如何在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); // 注册上下文菜单 // 设置ListView的长按监听器 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { // 在长按时显示上下文菜单 view.showContextMenu(); return true; } }); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); // 创建上下文菜单 getMenuInflater().inflate(R.menu.context_menu, menu); } @Override public boolean onContextItemSelected(MenuItem item) { // 处理上下文菜单的点击事件 switch (item.getItemId()) { case R.id.menu_item_delete: // 删除操作 return true; case R.id.menu_item_edit: // 编辑操作 return true; default: return super.onContextItemSelected(item); } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值