Android基础知识(二)—-Menu

Android常用菜单:

1.OptionsMenu.

2.ContextMenu.

3.android4.0以后的PopupMenu和ActionMode.

OptionsMenu

1. 创建:

1.1 在需要设置OptionsMenu的Activity中重写onCreateOptionsMenu(Menu

menu)方法,并且返回true(否则将不会显示ContextMenu)。

1.2 在onCreateOptionsMenu(Menu menu)中,向参数中的menu对象加入我们

需要设置的菜单选项。这里加入菜单选项有两种方法:

1)通过menu对象的add方法加入菜单按钮。

2)通过注入res/menu中的Menu定义文件,加入菜单按钮。

1.3 现在我们就有了ContextMenu了。

2.属性:

android:title 名字;

android:id  ID值;

android:orderInCategory   menu排序;

android:showAsAction  menu显示方式:

ifRoom :会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个数并不仅仅局限于4个,依据屏幕的宽窄而定

never :永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义item的时候,最好把标题都带上。

always :无论是否溢出,总会显示。

withText :withText值示意Action bar要显示文本标题。Action bar会尽可能的显示这个标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可能显示不全。

collapseActionView(4.1及以下的模拟器用不出效果):声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。一般与ifRoom结合使用。

在onOptionsItemSelected(MenuItem item)中监听到OptionsMenu点击事件,能得到所点击的菜单按钮的对象MenuItem。

3.添加子菜单

方法1:我们可以在Menu的item中添加新的Menu标签,用来添加子菜单。

方法2:在onCreateOptionsMenu(Menu menu)中通过addSubMenu向菜单加入子菜单。

public class OptionsMenuActivity extends Activity {

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		/*//1.通过JAVA代码添加菜单
		//为menu添加选项
		menu.add("Search") ;
		//groupId 选项的组号;itemId 选项的id; order 排列的序号;
		menu.add(0, 5, 0, "Setting") ;

		//为menu添加子菜单
		SubMenu more = menu.addSubMenu("More") ;
		more.add("more1") ;
		more.add("more2") ;*/

		//2.通过XML资源文件添加菜单
		getMenuInflater().inflate(R.menu.menu, menu) ;

		System.out.println("onCreateOptionsMenu");

		//返回true代表显示OptionsMenu,返回falseOptionsMenu将无法显示。
		return true ;
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		System.out.println("onPrepareOptionsMenu");
		//删除Search选项
		menu.removeItem(R.id.menu_search) ;
		return super.onPrepareOptionsMenu(menu);
	}

	/**
	 * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		//响应点击事件
		String title = (String) item.getTitle() ;

		if("Search".equals(title)){

		}else if("Setting".equals(title)){

		}else if("More".equals(title)){

		}
		System.out.println("MenuItem = "+title);

		//这里返回true或false,我们都能响应到。
		//用于表示我们处理掉这个事件(true),false代表我们不处理。
		return false ;
	}

}

TIPS:

他们的点击监听都在onOptionsItemSelected中;

onCreateOptionsMenu只会调用一次,只有在创建的时候会调用。需要调用 onPrepareOptionsMenu()方法,在这里修改OptionMenu的状态与按钮;

在4.0以上,我们必须先调用invalidateOptionsMenu(),才能调用onPrepareOptionsMenu()。

Float Contextual Menu

这是一个浮动菜单,需要长按触发。

1.创建:

1.1 创建Menu我们一样需要在Activity中实现一个方法:

onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo),并在其中创建菜单。

1.2 触发方法

registerForContextMenu(View view)将这个菜单绑定到一个View上去。

onContextItemSelected(MenuItem item)。

PopupMenu

提供了一个类似于Window下鼠标右键菜单的操作方式

1. 创建对象:

PopupMenu pMenu = new PopupMenu(this, view);

2. 注入界面:

pMenu.getMenuInflater().inflate(R.menu.menu, pMenu.getMenu());

3. 添加监听

pMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

@Override

public boolean onMenuItemClick(MenuItem item) {

return false;

}

});

4. 显示:pMenu.show();

5. 手动取消: pMenu.dismiss() ;

时间: 2024-08-12 01:49:56

Android基础知识(二)—-Menu的相关文章

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

Android基础知识【项目实训】【3】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 欢迎界面过后,应该显示app的主界面了,根据[UI设计指导]中的规划,主界面采用上下两级标签导航.这部分是app开发中比较麻烦的一块. 1.先来看一下,最终的效果吧,这样做起来比较有底: 默认显示的主界面,下部是主导航,上面是二级导航,默认打开的是"促销打折"这一版面

Android基础知识【项目实训】【4】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 主界面的功能确实比较复杂,因此上一篇知识说的周边内容.现在开始说这个界面的代码和布局文件. 1.先看一下项目的组织结构吧,要不然不好说他们的关系: (1)db包中的都是跟 数据库相关的 (2)eatall中放的都是activity或者fragment (3)entity中放的实

Android基础知识【项目实训】【5】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 主界面中包含两个二级子界面,分别是活动界面和账单界面,下面介绍它们的实现代码和布局文件. 1.下面这个是 活动界面的Activity代码,因为这个界面加载时需要 读取数据库中数据了,所有功能的实现上会涉及到 db那个包中一些类. 注意这个Activity也是继承 Activit

(Android 基础知识review)打电话

1.main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"

android基础知识

1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. Ÿ 第四代移动通信技术(4th - Generation),速度可达到100Mbps以上,几乎可以满足人们的所有传输数据的需求. Ÿ 目前主流的3G技术标准有三种: WCDMA:全球80%以上的3G网络都是采用此种制式.中国联通运营.186 CDMA2000:目前日韩及北美使用较多.中国电信运营. 189 TD-SCDMA

Android 面试题总结之Android 基础(二)

Android 面试题总结之Android 基础ContentProvider(二) 在上一章节Android 面试题总结之Android 基础Activity(一) 我们讲的Activity基础知识.有许多朋友反映看着比较乱,我又回去看了看 ,确实很乱,不够细心.然后我又重新整理了一遍.让大家阅读体验更好! 在阅读过程中有任何问题,请及时联系. 本章系<Android 之美 从0到1 – 高手之路>Android基础ContentProvider 总结了Android 开发者面试比较常见的C

android基础知识13:AndroidManifest.xml文件解析

1.重要性 AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目录下,描述了package中的全局数据,包括package中暴露的组件 (activities, services, 等等),以及他们各自的实现类,各种能被处理的数据和启动位置等重要信息. 因此,该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所

Android基础知识【项目实训】【1】

[该项目实训是Android基础知识的一个综合练习] [项目题目]:校园订餐App设计 综合案例 [设计目标] 1.必要功能 ?快餐店浏览,与订餐 ?今天订餐活动查询与订餐,特价饭菜预定 ?分类订餐查询,预定 ?常定饭菜  预定 ?健康餐推荐 ?定时预定,提前预定 ?订单查看, ?餐馆与饭菜打分,评价 ?用户注册与登录 2.扩展选择功能 ?快速拨打电话 ?饮食跟踪,热量估算 ?系统设置 [项目说明] 该项目为实际应用项目的单机 简化版本,只需要完成Android平台App的设计与开发工作. Ap