Android4.0 -- UI控件之 Menu 菜单的的使用(一)
1. 三种菜单显示的方式
1). Options menu and action bar2). Context menu and contextual action mode3). Popup menu
2. 今天我们来介绍一下 Menu 的第一种的使用方式:Options menu and action bar [action bar 这里先不做介绍,后期会详细专题讲解]
1) Options menu介绍
Options menu 是一个Activity中的菜单选项的主要组成部分,它是作用在全局的app中的,比如说 "Search","Compose email","Settings."
2) Options menu 定义方式
public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title)
groudId:是指组ID,用以批量地对菜单子项进行处理和排序
itemId:是子项ID,是每一个菜单子项的唯一标识
order:指定菜单子项在选项菜单中的排列顺序
titler: 菜单标题
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater =
getMenuInflater()
;
inflater.inflate(R.menu.game_menu, menu);
return true;
}
3) 触发事件
触发点击事件,当用户选择从菜单选项中选择一项的时候(包括 ActionBar中的action items) ,系统会调用你Activity的onOptionsItemSelected()方法,这个方法会根据MenuItems来选择,你可以调用getItemId()来确定选项的ID,这个ID值就是你在菜单资源中定义的id属性值或者你通过add()方法给出的一个整型值。
4) 在代码中创建 Option menu 菜单的实现
1) 布局文件 activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > </RelativeLayout>
2) 主要代码 MainActivity.java
public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} // 创建菜单有两种使用方式,一种是 使用inflate 来加载XML,如以下注释中
// 第二种是使用 add()方法的方式来操作。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.main, menu); 第一种使用方式
// 设置菜单选项一般最好设置低于 6个选项
MenuItem menuItem = menu.add(1001, 100, 1, "菜单一");
// menuItem.setIcon(R.drawable.ic_launcher); //高版本中不建议添加图标。添加了图标也不会显示的。
MenuItem menuItem2 = menu.add(1001, 101, 2, "菜单二");
MenuItem menuItem3 = menu.add(1001, 102, 3, "菜单三");
menuItem3.setShortcut('c', 'c'); // 设置菜单快捷键
return true;
} // 触发菜单的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 100:
Toast.makeText(MainActivity.this, "点击菜单一选项", 3).show();
break;
case 101:
// 菜单选项一般都用户跳转到其他Activity的操作,使用
// setIntent()方法,当然也可以通过Intent来传递一些信息。
Intent intent = new Intent(MainActivity.this, NextActivity.class);
item.setIntent(intent);
break;
case 102:
break;
default:
break;
}
return super.onOptionsItemSelected(item);
} }
3) 跳转到的另外一个Activity的布局文件 next_activity.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:orientation="vertical" > <ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
4) 跳转到的另外一个Activity代码 NextActivity.java
package com.android.menudemo; import android.app.Activity;
import android.os.Bundle; public class NextActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.next_activity);
}
}
5) 程序执行结果
5. 在 XML 中定义一个 Option Menu
下面我们来学一下第二种定义菜单的方式,使用XML来定义菜单,对于所有的菜单类型,Android 提供了一种标准的 XML 格式来定义菜单选项来替换在Activity中编写菜单的方式,你可以定义一个菜单和它所有的选项在XML菜单资源中,你可以通过 inflate 菜单资源(将其加载为一个Menu对象) 在你的activity 或者 fragment中。1) 使用这种方式有几个好处:1. 定义在xml中比较容易的显示出菜单的结构2. 可以将菜单的内容与应用程序代码进行独立3. 在不同的平台版本,屏幕尺寸和其他配置中,可以通过应用资源框架来允许你建立灵活的菜单配置2) 定义菜单的位置:
定义好菜单选项,建立一个xml文件在你工程目录:res/menu/ 中,同时建立其组成菜单的以下标签元素。
<menu>
定义好一个 Menu,它是菜单选项的内容包含者,<menu> 标签元素必须是这个文件的根节点,而且支持一个或者多个的<item>和<group>元素。
<item>
创建一个 MenuItem,它是菜单里面的一个单一的选项,这个元素可以包含一个嵌套的 <menu> 元素来创建一个子菜单。
<item> 元素包含的属性有
android:id
android:icon
android:title
android:showAsActionandroid:showAsAction [这个属性比较重要的:它是作为aciton bar中的活动选项,可以指定何时或者如何显示] = "never" 表示不会在 ActionBar的标题栏中去显示了,查看API文档: Menu Resource 的android:showAsAction 各种属性,下面就写两个,其他读者自己去参考。
ifRoom: 可以将这个选项放置在导航栏中,如果它有空间的话。withText: 可以在导航栏中设置标题,这个标题就是通过 android:title 定义的android:orderInCategory 表明摆放的顺序,不一定从0还是计算,但必须大于等于0,建议从0,1,2,3....这样依次给出,并且与XML行文的顺序一致。
<group>
这是可选的标签,它可以让你将菜单选项分类,这样他们就能分享一些配置,比如活动状态和显示隐藏状态等。更多信息查看 Creating Menu Groups.
6. 主要代码实现
1) 菜单文件 menu.xml 在目录 res/menu/ 中。
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item
android:id="@+id/action_settings"
android:icon="@drawable/two"
android:orderInCategory="100"
android:showAsAction="ifRoom|withText"
android:title="@string/action_settings">
<menu>
<item
android:id="@+id/create_new"
android:title="新建文件"/>
<item
android:id="@+id/open"
android:title="打开文件"/>
</menu>
</item>
<item
android:id="@+id/sys"
android:icon="@drawable/two"
android:orderInCategory="101"
android:showAsAction="never"
android:title="用户菜单">
<menu>
<group android:id="@+id/group1" >
<item
android:id="@+id/load"
android:title="加载文件">
</item>
</group>
<group android:id="@+id/group1" >
<item
android:id="@+id/save"
android:title="保存文件">
</item>
</group>
</menu>
</item> </menu>
2) 主要代码 MainActivity.java
package com.android.menudemo; import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case R.id.create_new:
Intent intent = new Intent(MainActivity.this, NextActivity.class);
item.setIntent(intent);
break;
case R.id.open:
Toast.makeText(MainActivity.this, "打开文件", 3).show();
break;
case R.id.load:
Toast.makeText(MainActivity.this, "加载文件", 3).show();
break;
case R.id.save:
Toast.makeText(MainActivity.this, "保存文件", 3).show();
break;
default:
break;
}
return super.onMenuItemSelected(featureId, item);
} }
7. 程序执行结果
详细参考:http://developer.android.com/guide/topics/ui/menus.html
Android4.0 -- UI控件之 Menu 菜单的的使用(一)的更多相关文章
- Android4.0 -- UI控件之 Menu 菜单的的使用(三)
上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...
- Android4.0 -- UI控件之 Menu 菜单的的使用(二)
上一讲我们讲解了android中在代码或者xml文件中定义菜单,这一讲我们继续来讲解一下定义菜单的其他方式:创建上下文的菜单.查看API文档 Menus :Creating Contextual Me ...
- Android4.0 -- UI控件之 Menu 菜单的的使用(四)
2. PopupMenu 菜单的使用 1) PopupMenu 介绍 创建弹出菜单,它一般会在view的上边或者下边弹出菜单[具体看是否有空间],注意弹出菜单是api在11或者更高版本中使用 ...
- 一个Activity掌握Android4.0新控件 (转)
原文地址:http://blog.csdn.net/lavor_zl/article/details/51261380 谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常 ...
- Atitit.ui控件---下拉菜单选择控件的实现select html
Atitit.ui控件---下拉菜单选择控件的实现select html 1. 调用& model的实现 1 2. -----select.jsp------ 1 1. 调用& m ...
- Android4.0新控件
谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常用的新控件有下面5种. 1. Switch的使用 Switch顾名思义,就是开关的意思,有开和关两种状态. 当Swit ...
- Android 控件 之 Menu 菜单
http://www.cnblogs.com/Mrs-cc/archive/2012/07/21/2603042.html 1.OptionsMenu (选项菜单)用法总结 使用方法: 方法一:添 ...
- Cocos2d-x3.0游戏实例之《别救我》第六篇——从代码中获取UI控件
这篇的内容非常easy,获取UI控件,然后使用它. 还记得我们在UI编辑器中给三个button分别命名了吧? 如今要用上了. 笨木头花心贡献,啥?花心?不呢,是用心~ 转载请注明,原文地址: http ...
- Cocos2d-x3.0 从代码中获取cocostudio编辑的UI控件
依据名字查找控件 须要包括的头文件及名字空间: #include "cocostudio/CocoStudio.h" #include "ui/CocosGUI.h&qu ...
随机推荐
- /etc/resolv.conf文件详解
大家好,今天51开源给大家介绍一个在配置文件,那就是/etc/resolv.conf.很多网友对此文件的用处不太了解.其实并不复杂,它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名 ...
- javascript Object的长度
1.示例 var obj = { a:"hello", b:"world", c:"hehe" } var key = 0; for(var ...
- 图像储存容器Mat[OpenCV 笔记11]
IplImage 与 Mat IplImage是OpenCV1中的图像存储结构体,基于C接口创建.在退出之前必须release,否则就会造成内存泄露.在一些只能使用C语言的嵌入式系统中,不得不使用. ...
- 2、Charm Bracelet( poj 3624)简单0-1背包
题意:有n件手镯,总重量不能超过M,每个手镯有一个体重W[i]和魅力V[i],问在不超过M的情况下能获得的魅力总和 思路:把M当背包总容量,用0-1背包写 代码: #include <iostr ...
- C++里容易忽视却不能忽视的
1 define 只是简单地文本替换. 2 每个机器的字长不同. 3 每个类型在不同的机器上,所占用的内存空间不同. 4 每个机器内部的字节大小端不同. 5 并不是所有的编译器或机器都支持最新的C++ ...
- SGU 260.Puzzle (异或高斯消元)
题意: 有n(<200)个格子,只有黑白两种颜色.可以通过操作一个格子改变它和其它一些格子的颜色.给出改变的关系和n个格子的初始颜色,输出一种操作方案使所有格子的颜色相同. Solution: ...
- 基于jQuery的图片左右轮播,基本原理通用
毕竟新人,写点基础的小东西,希望能和大家沟通交流,提高自己的水平. 这个是应用较多的轮播部分,希望能和大家分享一下思路,拓宽视野. 话不多说,上内容. 我的思路很简单就是通过判断index值的大小变化 ...
- Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件
做个项目使用jquery easyui来做前端,也许是对此不是很熟悉,总是发现一些不可理解的事件. 主要源代码如下: <script type="text/javascript&qu ...
- TDirectory.Move移动或更名目录
使用函数: System.IOUtils.TDirectory.Move 定义: class procedure Move(const SourceDirName, DestDirName: stri ...
- 网络编程TCP/IP实现客户端与客户端聊天
一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. TCP/I ...