Android三种菜单的使用方式
一、选项菜单(OptionMenu)
- 在
res目录下新建menu目录,用于放置菜单布局文件(右键res->new->Android Resource Directory->menu) - 在
menu下创建菜单布局文件,根标签为menu,menu下面有多个group,group下面有多个item.
简单示例如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/oi_1"
android:title="编程语言"
android:checkable="true"></item>
<item
android:id="@+id/oi_2"
android:checkable="true"
android:title="算法"></item>
</menu>
- 重写
Activity的onCreateOptionsMenu方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//根据菜单布局文件填充菜单项
getMenuInflater().inflate(R.menu.menu_options, menu);
return true;
}
- 监听菜单项
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.oi_1:
doSomething....
return true;
case R.id.oi_2:
doSomething....
return true;
case R.id.oi_3:
doSomething....
return true;
case R.id.oi_4:
doSomething....
return true;
default:
doSomething....
return super.onOptionsItemSelected(item);
}
}
二、上下文菜单
- 创建菜单布局文件
- 为指定view(可以是Button,TextView等等)注册上下文菜单
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_context_menu);
//这是一个按钮
Button colorSelector = findViewById(R.id.btn_color_selector);
//为button注册上下文菜单
registerForContextMenu(colorSelector);
}
- 重写
Activity的onCreateOptionsMenu方法
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//为菜单设置title
menu.setHeaderTitle("please select your favorite color:");
//填充菜单项
getMenuInflater().inflate(R.menu.menu_context, menu);
}
- 监听菜单项
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()){
case R.id.ci_red:
colorSelector.setBackgroundColor(Color.parseColor("red"));
return true;
case R.id.ci_purple:
colorSelector.setBackgroundColor(Color.parseColor("purple"));
return true;
case R.id.ci_white:
colorSelector.setBackgroundColor(Color.parseColor("white"));
return true;
}
return super.onContextItemSelected(item);
}
- 取消注册
@Override
protected void onDestroy() {
super.onDestroy();
//取消注册,防止内存溢出
unregisterForContextMenu(colorSelector);
}
三、弹出式菜单
- 创建菜单布局文件
- 监听指定view点击事件,同时构建弹出菜单对象
//这是对应button的点击监听事件
public void showPopupMenu(View view) {
final PopupMenu menu = new PopupMenu(PopupMenuActivity.this, view);
getMenuInflater().inflate(R.menu.menu_popup, menu.getMenu());
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.pi_hide:
//菜单隐藏
menu.dismiss();
return true;
default:
Toast.makeText(PopupMenuActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
}
});
menu.show();
}
Android三种菜单的使用方式的更多相关文章
- Android 三种菜单(Menu)的实现
感谢大佬:https://blog.csdn.net/chileme/article/details/82944764 一.常用方法 java onCreateOptionsMenu(Menu men ...
- Android三种菜单简介
Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu). 一.选项菜单 用户点击设备上的菜单按钮(Menu),触发事件 ...
- Android三种播放视频的方式
在Android中,我们有三种方式来实现视频的播放: 1.使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2.使用VideoView来播放. ...
- Android三种基本的加载网络图片方式(转)
Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...
- 三种Singleton的实现方式
来源:http://melin.iteye.com/blog/838258 三种Singleton的实现方式,一种是用大家熟悉的DCL,另外两种使用cas特性来实现. public class Laz ...
- Request三种获取数据的方式
今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Req ...
- Objective-C:三种文件导入的方式以及atomic和nonatomic的区别
一.三种文件导入的方式比较: 类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)
Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...
- 三种root的修补方式
三种root的修补方式 system/core/adb/abd.c adbd漏洞,请看abd.c的第917行/* then switch user and group to "shell&q ...
随机推荐
- 算法习题---3.08循环小数(UVa202)
一:题目 输入整数a和b(<=a<=,<=b<=),输出a/b的循环小数表示以及循环节长度. 例如,a=,b=,小数表示为0.(),循环字节长度为21 当循环节长度超过50时, ...
- python 对xls写入信息
只能新创建xls # coding=utf-8import xlwt writebook = xlwt.Workbook() #打开excel test= writebo ...
- 【转】Selenium-xpath详解
1.XPATH是什么 XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表示为XHTML文档.X ...
- ALV显示金额字段值扩大100倍
内表数据 物料 库位 期末庫存金額F0D7004DSA 1PYF 701410.944F0D7004DSA 1SNT ...
- java8中计算两个日期时间LocalDateTime的时间差,格式化成xx年yy月zz日aa时bb分cc秒
原则上应该适用Period来计算,因为他是专门为这种需求设计的.当时他只能计算到两个时间差的,年月日 传入参数Period.between(LocalDate,LocalDate) 这里是计算两个Lo ...
- Java多线程——线程池使用示例
示例代码: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public cla ...
- Spring Boot中mybatis insert 如何获得自增id
https://www.cnblogs.com/quan-coder/p/8728410.html 注意要显式设置主键,通过: @Options(useGeneratedKeys = true, ke ...
- Java如何获取ResultSet结果中的每一列的数据类型
示例代码片段: ResultSet resultSet = statement.executeQuery(sql); ResultSetMetaData metaData = resultSet.ge ...
- sql语句-按照汉字拼音首字母排序
在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M 按照部首(第一顺序).笔划(第二顺序)排序SCHINESE_STROKE_M 按照 ...
- 有四个数字能组成多少个互不相同的三位数 --Python
有四个数字能组成多少个互不相同的三位数? num = 0 for i in range(1, 5): for j in range(1, 5): for k in range(1, 5): if i ...