博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android笔记】ContextMenu上下文菜单
阅读量:6330 次
发布时间:2019-06-22

本文共 4884 字,大约阅读时间需要 16 分钟。

hot3.png

ContextMenu上下文菜单

1.ContextMenu菜单的组成部分

  • 标题及标题图标
  • 菜单内容
  • 菜单内容的点击响应事件

2.ContextMenu与OptionMenu的区别

  • OptionMenu对应的是activity,一个activity只能拥有一个选项菜单
  • ContextMenu对应的是View,每个View都可以设置上下文菜单

3.ContextMenu的创建方法

  • 首先给View注册上下文菜单registerForContextMenu()
  • 添加上下文菜单内容onCreateContextMenu()
  • 设置菜单点击后响应事件onContextItemSelected()

实例一:动态添加

package com.example.demo16;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.ContextMenu;import android.view.MenuItem;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        showListView();    }    /**     * 设置ListView显示内容     */    private void showListView(){        ListView listView = (ListView) findViewById(R.id.listView);        ArrayAdapter
adapter = new ArrayAdapter
(this, android.R.layout.simple_list_item_1, getData()); listView.setAdapter(adapter); this.registerForContextMenu(listView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); //设置Menu显示内容 menu.setHeaderTitle("文件操作"); menu.setHeaderIcon(R.drawable.file); menu.add(1, 100, 1, "复制"); menu.add(1, 101, 1, "剪切"); menu.add(1, 102, 1, "粘贴"); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case 100: Toast.makeText(MainActivity.this, "点击了复制", Toast.LENGTH_SHORT).show(); break; case 101: Toast.makeText(MainActivity.this, "点击了剪切", Toast.LENGTH_SHORT).show(); break; case 102: Toast.makeText(MainActivity.this, "点击了粘贴", Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } /** * 构造ListView显示的数据 * @return */ private ArrayList
getData(){ ArrayList
list = new ArrayList
(); for(int i=0; i<5; ++i) { list.add("文件" + i); } return list; }}

运行效果:

实例二:使用xml添加

1.在资源目录res下创建menu资源文件夹

2.在menu文件夹下创建main.xml文件

3.创建菜单

package com.example.demo16;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.ContextMenu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        showListView();    }    /**     * 设置ListView显示内容     */    private void showListView(){        ListView listView = (ListView) findViewById(R.id.listView);        ArrayAdapter
adapter = new ArrayAdapter
(this, android.R.layout.simple_list_item_1, getData()); listView.setAdapter(adapter); //注册上下文菜单 this.registerForContextMenu(listView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); //设置Menu显示内容 menu.setHeaderTitle("文件操作"); menu.setHeaderIcon(R.drawable.file); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_item1: Toast.makeText(MainActivity.this, "点击了复制", Toast.LENGTH_SHORT).show(); break; case R.id.action_item2: Toast.makeText(MainActivity.this, "点击了剪切", Toast.LENGTH_SHORT).show(); break; case R.id.action_item3: Toast.makeText(MainActivity.this, "点击了粘贴", Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } /** * 构造ListView显示的数据 * @return */ private ArrayList
getData(){ ArrayList
list = new ArrayList
(); for(int i=0; i<5; ++i) { list.add("文件" + i); } return list; }}

效果如上例

 

转载于:https://my.oschina.net/daowuming/blog/754027

你可能感兴趣的文章
【进阶3-1期】JavaScript深入之史上最全--5种this绑定全面解析
查看>>
使用Xcode External Build System实现Rust 项目 Capture GPU Frame 在线调试 Metal 2018.12.18
查看>>
【年度总结】我的2018年
查看>>
阿里提出电商搜索全局排序方法,淘宝无线主搜GMV提升5%
查看>>
华为工程师SRECon Asia见闻:聚焦可靠性、资源优化及性能提升
查看>>
【预告】腾讯移动分析 MTA 即刻登陆 2017 GMTC 全球移动技术大会
查看>>
AliOS Things lorawanapp应用介绍
查看>>
Flutter底部导航栏的实现
查看>>
[译] How to NOT React:React 中常见的反模式与陷阱
查看>>
随笔 | 抢红包不是一件小事
查看>>
Generator的正确打开方式
查看>>
Yours的Ryan X Charles谈BCH驱动社交媒体
查看>>
webpack4.0打包优化策略(二)
查看>>
[译] React 路由和 React 组件的爱恨情仇
查看>>
test.json
查看>>
(4)mysql 中的常用函数
查看>>
实现不可变类如何禁止子类化?
查看>>
volatile关键字的作用、原理
查看>>
命令模式
查看>>
对第三方 SDK 依赖冲突,重新打个包试试
查看>>