android学习笔记37——Menu资源
Menu菜单资源
android应用推荐使用XML来定义菜单,其可提供更好的解耦方式。
菜单资源通常位于res/menu文件夹下,其菜单根元素为<menu.../>,menu元素下可包含子元素如下:
| <item.../>子元素 | 定义菜单项 | 
| <group.../>子元素 | 将多个<item>定义的菜单项包装成一个菜单组 | 
| <group.../>子元素 | 用于控制整个菜单组的行为,该元素可指定如下常用属性: | 
| 
 checkableBehavior:指定该组菜单的行为,可指定为none(不可选)、all(多选)、single(单选) menuCategory:对菜单进行分类,指定菜单的优先级。有效值为container、system、secondary、alternative visible:指定改组菜单是否可见 enable:指定改组菜单是否可用  | 
<item.../>元素用于定义一份菜单项,其又可包含<menu.../>元素,位于<item.../>内的<menu../>代表子菜单。
<item.../>元素可指定如下属性:
| android:id | 为菜单项指定唯一标识 | 
| android:title | 指定菜单项标题 | 
| android:icon | 指定菜单项图标 | 
| android:alphabeticShortcut | 为菜单项指定字符快捷键 | 
| android:numericShortcut | 为菜单项指定数字快捷键 | 
| android:checkable | 设置菜单项是否可选 | 
| android:checked | 设置菜单项是否已选中 | 
| android:visible | 设置菜单项是否可见 | 
| android:enable | 设置菜单项是否可用 | 
注意:一旦在程序中定义菜单资源后,需要重写onCreateOptionsMenu(用于创建选项菜单)、onCreateContextMenu(用于创建上下文菜单),
在这些方法调用MenuInflater对象的inflate方法装载指定资源对应的菜单即可。
实例如下:
资源文件==》mymenu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item
android:icon="@drawable/font"
android:title="@string/font_size">
<menu> <!-- 定义一组单选菜单项 -->
<group android:checkableBehavior="single" > <!-- 定义多个菜单项 -->
<item
android:id="@+id/font_10"
android:title="@string/font_10">
</item>
<item
android:id="@+id/font_12"
android:title="@string/font_12">
</item>
</group>
</menu>
</item>
<!-- 定义一个普通菜单 -->
<item
android:id="@+id/plain_item"
android:title="@string/plant_item"/>
<item
android:icon="@drawable/color"
android:title="@string/font_color">
<menu> <!-- 定义一组运行复选的菜单项 -->
<group>
<item
android:id="@+id/red_font"
android:title="@string/font_red"/>
<item
android:id="@+id/green_font"
android:title="@string/font_green"/>
<item
android:id="@+id/blue_font"
android:title="@string/font_blue"/>
</group>
</menu>
</item> </menu> context.xml==》
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 定义一组单选菜单 -->
<group android:checkableBehavior="single" >
<item
android:id="@+id/red1"
android:title="@string/title_red"
android:alphabeticShortcut="r"/>
<item
android:id="@+id/green1"
android:title="@string/title_green"
android:alphabeticShortcut="g"/>
<item
android:id="@+id/blue1"
android:title="@string/title_blue"
android:alphabeticShortcut="b"/>
</group> </menu> 布局文件==>
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity" > <EditText
android:id="@+id/tvtest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="110112119" /> </LinearLayout>
代码实现==》
package com.example.mymenu2; import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity
{
private EditText tv; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("swg", "aaaaaaaaaaaaaaaaaa");
tv = (EditText) this.findViewById(R.id.tvtest);
// 为文本框注册上下文菜单
registerForContextMenu(tv);
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = new MenuInflater(this);
inflater.inflate(R.menu.context, menu);
return super.onCreateOptionsMenu(menu);
} @Override
// 每次创建上下文菜单时都会触发该方法
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
{
MenuInflater inflater = new MenuInflater(this);
inflater.inflate(R.menu.mymenu, menu);
menu.setHeaderIcon(R.drawable.oneowne);
menu.setHeaderTitle("请选择背景色");
} @Override
// 上下文菜单中菜单项被单击时触发该方法
public boolean onOptionsItemSelected(MenuItem item)
{
Log.i("swg", "111111111111111111111");
Log.i("swg", "item.getItemId()====" + item.getItemId()); switch (item.getItemId())
{
case R.id.red1:
// case R.id.red_font:
item.setChecked(true);
tv.setBackgroundColor(Color.RED);
tv.setTextColor(Color.RED);
System.out.println("-------------------RED------------------");
Log.i("swg", "aaaaaaaaaaaaaaaaaarrrrrrrrrrrrrrrrrrrr");
break;
case R.id.green1:
item.setChecked(true);
tv.setBackgroundColor(Color.GREEN);
tv.setTextColor(Color.GREEN);
System.out.println("-------------------GREEN------------------");
Log.i("swg", "aaaaaaaaaaaaaaaaaaddddddddddddddddd");
break;
case R.id.blue1:
item.setChecked(true);
tv.setBackgroundColor(Color.BLUE);
tv.setTextColor(Color.BLUE);
System.out.println("-------------------BLUE------------------");
Log.i("swg", "aaaaaaaaaaaaaaaaaabbbbbbbbbb");
break;
}
return true;
} // 菜单项被单击后的回调方法
@Override
public boolean onContextItemSelected(MenuItem item)
{
Log.i("swg", "2222222222222222");
switch (item.getItemId())
{
case R.id.font_10:
tv.setTextSize(10 * 2);
break;
case R.id.font_12:
tv.setTextSize(12 * 2);
break;
case R.id.plain_item:
Toast.makeText(MainActivity.this, "你单击了普通菜单", Toast.LENGTH_LONG).show();
break;
}
return true;
} }
注意:长按可触发上下文方法;普通菜单需要处理onCreateOptionsMenu、onOptionsItemSelected;上下文菜单需要处理onCreateContextMenu、onContextItemSelected
运行效果:略。
android学习笔记37——Menu资源的更多相关文章
- Android学习笔记之Menu的ShowAsAction属性的设置
		
(1)在res--menu目录下的main.xml文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...
 - android学习笔记35——AnimationDrawable资源
		
AnimationDrawable资源 AnimationDrawable,代表一个动画. android既支持传统的逐帧动画(类似于电影方式,一张图片一张图片的切换),也支持通过平移.变换计算出来的 ...
 - android学习笔记34——ClipDrawable资源
		
ClipDrawable ClipDrawable代表从其他位图上截取一个“图片片段” 在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为: 以上语 ...
 - 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
		
目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...
 - 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
		
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
 - 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
		
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
 - 【转】Pro Android学习笔记(四):了解Android资源(下)
		
处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...
 - 【转】Pro Android学习笔记(三):了解Android资源(上)
		
在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...
 - 【转】Pro Android学习笔记(十):了解Intent(上)
		
目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...
 
随机推荐
- ZPPR032-批量展BOM
			
*-----------------------------------------------------------------------REPORT zppr032 NO STANDARD P ...
 - 简单实用的纯CSS百分比圆形进度条插件
			
percircle是一款简单实用的纯CSS百分比圆形进度条插件.你不需要做任何设置,只需要按该圆形进度条插件提供的标准HTML结构来编写代码,就可以生成一个漂亮的百分比圆形进度条. 首先要做的就是引入 ...
 - leetcode 115  Distinct Subsequences ----- java
			
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
 - MySQL日志功能
			
1.查询日志 log={ON|OFF}:是否记录所有语句的日志信息于一般查询日志文件(general_log); log_output={TABLE|FILE|NONE},TABLE和FILE可以同时 ...
 - Objective-c——UI基础开发第六天(UITableView)
			
一.UITableView的简单使用 显示要素: 1.显示多少给区组 2.显示多少行数据 3.每行显示什么内容 代理不会提醒你有什么方法没调用,但是UITableViewDataSource会 1)用 ...
 - URAL(timus)1709 Penguin-Avia(并查集)
			
Penguin-Avia Time limit: 1.0 secondMemory limit: 64 MB The Penguin-Avia airline, along with other An ...
 - Android dip(dp) 与 sp的自适应问题
			
本文转载于:http://www.oschina.net/question/272860_70761 今天碰到的一个问题,感觉应该其他人也会碰到,拿来分享一下. 我们都知道android在开发配置界面 ...
 - exceptions-in-java
			
http://www.javaworld.com/article/2076721/core-java/designing-with-exceptions.html http://www.javawor ...
 - powershell samples
			
1,导出至EXCEL $arr =New-Object System.Collections.ArrayList $i = 1 $pstablelist = @(); $array =get-user ...
 - svn常见错误总结
			
1. svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS reque ...