android Menu 笔记
菜单是应用中常见的用户组件。本文介绍如何在布局文件和代码中添加menu,submenu以及在代码中添加的方法。
参考链接
https://developer.android.com/guide/topics/ui/menus.html?hl=zh-cn
http://www.cnblogs.com/smyhvae/p/4133292.html
布局文件
<?xml version="1.0" encoding="utf-8"?>
<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="com.example.menutest.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
menu的布局文件
放置了一个start选项,以及一个set选项,并在set里面设置了2个子菜单set1和set2.
main_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/start"
android:title="start"
app:showAsAction="always" />
<item
android:id="@+id/set"
android:title="set"
app:showAsAction="always" >
<menu>
<item
android:id="@+id/set1"
android:title="set1"
app:showAsAction="always" />
<item
android:id="@+id/set2"
android:title="set2"
app:showAsAction="always" />
</menu>
</item>
</menu>
清单文件
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.menutest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
重写onCreateOptionsMenu (Menu menu)函数,并调用inflate(R.menu.main_menu, menu)。这样menu的布局文件中的空间才会显示出来。
重写onOptionsItemSelecte()对菜单的点击事件进行监听。
addSubMenu()添加子菜单。并调用add()函数在子菜单中添加选项。
调用menu.add()在菜单中添加一个选项。
package com.example.menutest;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private static final int CONF_ITEM = Menu.FIRST;
private static final int CONF_ITEM_1= Menu.FIRST + 1;
private static final int CONF_ITEM_2 = Menu.FIRST + 2;
private static final int STOP_ITEM = Menu.FIRST + 3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu (Menu menu) {
int groupId = 0;
/*
* 添加子菜单,并在子菜单中添加选项
* addSubMenu(final int groupId, final int itemId, int order, final CharSequence title);
* groupId: 组ID,有时候会将菜单放在同一个组中,同时对组进行相关的设置。
* itemId: 选项的id。点击选项的时候会根据这个来进行区分。
* order: 顺序
* title: 选项的标题
*/
SubMenu sub1 = menu.addSubMenu(groupId, CONF_ITEM, Menu.NONE, "CONF");
/*
* 为子菜单中添加选项。
* add(int groupId, int itemId, int order, CharSequence title);
* groupId: 组ID,有时候会将菜单放在同一个组中,同时对组进行相关的设置。
* itemId: 选项的id。点击选项的时候会根据这个来进行区分。
* order: 顺序
* title: 选项的标题
*/
sub1.add(groupId, CONF_ITEM_1, Menu.NONE, "CONF_1");
sub1.add(groupId, CONF_ITEM_2, Menu.NONE, "CONF_2");
// 添加一个菜单选项
menu.add(groupId + 1, STOP_ITEM, Menu.NONE, "STOP");
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.start:
Toast.makeText(getBaseContext(), "start", Toast.LENGTH_SHORT).show();
break;
case R.id.set:
Toast.makeText(getBaseContext(), "setting", Toast.LENGTH_SHORT).show();
break;
case R.id.set1:
Toast.makeText(getBaseContext(), "set 1", Toast.LENGTH_SHORT).show();
break;
case R.id.set2:
Toast.makeText(getBaseContext(), "set 2", Toast.LENGTH_SHORT).show();
break;
case STOP_ITEM:
Toast.makeText(getBaseContext(), "stop", Toast.LENGTH_SHORT).show();
break;
case CONF_ITEM:
Toast.makeText(getBaseContext(), "conf", Toast.LENGTH_SHORT).show();
break;
case CONF_ITEM_1:
Toast.makeText(getBaseContext(), "conf 1", Toast.LENGTH_SHORT).show();
break;
case CONF_ITEM_2:
Toast.makeText(getBaseContext(), "conf 2", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
Tony Liu
2017-3-16, Shenzhen
android Menu 笔记的更多相关文章
- 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- Android 学习笔记之Volley(七)实现Json数据加载和解析...
学习内容: 1.使用Volley实现异步加载Json数据... Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Android学习笔记之JSON数据解析
转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...
- 【转】Android开发笔记(序)写在前面的目录
原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...
- [置顶] Android开发笔记(成长轨迹)
分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...
- 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...
随机推荐
- python AES双向对称加密解密
高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...
- CSS2中的伪类与伪元素
CSS 伪类用于向某些选择器添加特殊的效果. 我们最常见的就是有超链接的时候,向下面这样 a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: ...
- spring mvc get方式乱码
使用spring get方式,向后台传递参数的时候,出现乱码,网上搜索了好久,最后发现原因是server.xml中默认的配置有问题,修改如下就正确了,图片: 文本信息: <Connect ...
- [elk]停电日志离线恢复故障处理-elk环境极速搭建
es数据手动导入 周末停电了两天,发现两天的日志没导入: 原因: 1. elk开启没设启动 2.日志入库时间是当前时间,不是日志本身的time字段 - 导入步骤 1. 先把日志拖下来 2. 事先需要干 ...
- c# 实现查找mysql安装路径
1.c#能够调用msyql的导入导出命令,可是须要先推断客户机是否安装了mysql.及其安装mysql的路径问题. 2.查询mysql安装路径的函数 private string GetMysqlPa ...
- 李洪强iOS之集成极光推送三iOS集成指南
李洪强iOS之集成极光推送三iOS集成指南 SDK说明 适用版本 本文匹配的 SDK版本:r2.1.5 以后.查看最近更新了解最新的SDK更新情况.使用Xcode 6及以上版本可以使用新版Push S ...
- Modbus 通讯协议
摘要 工业控制已从单机控制走向集中监控.集散控制,如今已进入网络时代,工业控制器连网也为网络管理提供了方便.Modbus就是工业控制器的网络协议中的一种. 关键词 Modbus协议,串行通信,LRC校 ...
- fileupload 上传execl文件的一些操作
OABaseReadExeclDataAction .class 包含创建临时文件目录,基本校验,取属性值,处理乱码,基类 这里在上传文件是execl并且需要读取的话,需要把fileitem对象转换成 ...
- C#中一道关于线程同步的练习题——模拟多窗口售票
题目:模拟窗口卖票,四个窗口同时对外开放售票,需要按顺序售出. 要求:输出每一张票的售出时间和售出窗口,不能出现票未售出或者被售出多次的情况. using System; using System.C ...
- RTX——第12章 系统时钟节拍和时间管理
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 RTX 操作系统的时钟节拍和时间管理函数,其中时间管理函数是 RTX 的基本函数,初学 ...