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 ...
随机推荐
- Sed简单入门实例
1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后 ...
- coreseek(sphinx)安装2(mysql数据源配置和测试)
Windows操作系统下 mysql数据源配置: 主要步骤: 配置mysql数据源配置文件->生成索引->开启索引 (三步) coreseek\etc\csft_mysql.conf ...
- android:clipToPadding 和 android:clipChildren 解决ListView设置padding后 padding不跟随改动
clipToPadding就是说控件的绘制区域是否在padding里面的,true的情况下如果你设置了padding那么绘制的区域就往里 缩, clipChildren是指子控件是否超过padding ...
- java List 排序 Collections.sort()
用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class ...
- 将String类型的XML解析并设置到实体类中
package com.mooc.string; import java.util.ArrayList; import java.util.List; import org.dom4j.Documen ...
- c#部分--- 一维数组放到集合中,在从集合中提取输出
输入班级人数,统计人名,性别,年龄: 建立一维数组,并放到集合中: //Console.Write("请输入班级人数:"); //int a = int.Parse(Console ...
- URAL 1242 Werewolf(DFS)
Werewolf Time limit: 1.0 secondMemory limit: 64 MB Knife. Moonlit night. Rotten stump with a short b ...
- jQuery判断元素是否在可视区
假设此元素为 #item,先说几个关键的属性: $('#item').offset().top#item 的绝对偏移量,指#item的实际尺寸(即不包括外边框margin)的上边界到页面顶端的距离.这 ...
- 黑马程序员——JAVA基础之多线程的安全问题
------- android培训.java培训.期待与您交流! ---------- 导致多线程出现问题的一个特殊的状态:就绪.具备了执行资格,但是还没有获取资源. 导致安全问题的出现的原因: 1. ...
- Qt消息机制和事件(二)
三,事件过滤器 有时候,对象需要查看.甚至要拦截发送到另外对象的事件.例如,对话框可能想要拦截按键事件,不让别的组件接收到:或者要修改回车键的默认处理. 通过前面的章节,我们已经知道,Qt 创建了QE ...