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 ...
随机推荐
- redis配置文件讲解
#redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf ############### ...
- android APP国际化一键切换实现
首先看目录: 上代码: package com.loaderman.language; import android.content.res.Configuration; import android ...
- Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用
一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...
- window server 2008 iis7+php安装配置
安装环境支持 Microsoft Visual C++ 2012 net framework 4.5 php配置 precision = 20 serialize_precision = 100 ...
- cookie和session-csrf防护-中间件
cookie概念: 是由服务器生成,保存在浏览器端的一小段文本信息. cookie特点: 1) cookie是以键值对进行存储的. 2) 浏览器访问网站时,会将本地保存的跟网站相关的所有cookie发 ...
- centos6.8下配置vsftp
几个小时的调试 终于OK了 以下配置就算开了selinux 也照样能正常上传 注意 默认的上传目录 在 /home/用户名目录 如果不能下载文件 设置下文件的权限 一.安装VSFTP # yum -y ...
- DOS与cmd(windows)
dos是计算机的最初期的操作系统,对电脑操作必须输入各种dos命令窗口,可以理解成运行计算机机器内部语言,知道编程吗?其实早期dos命令操作系统就是运行计算机内部的编程命令,因此操作人员都必须具有一定 ...
- iOS-UIScrollView滚动视图(转)
http://blog.csdn.net/iukey/article/details/7319314 UIScrollView 类负责所有基于 UIKit 的滚动操作. 一.创建 CGRect bou ...
- MOQ中CallBase的作用
当使用Moq来Mock一个具体的类,类里的方法为virtual时,Moq会将当前类,所有的virtual方法默认重写成空实现. 如果我们想要访问真实的代码,有两种方法 1.在创建Mock时,设置Cal ...
- Flutter 弹出键盘屏幕溢出问题
在使用输入框获取焦点,弹出键盘的时候,会导致屏幕溢出, 解决办法: resizeToAvoidBottomPadding: false, //输入框抵住键盘 return Scaffold( appB ...