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资源的更多相关文章

  1. 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 ...

  2. android学习笔记35——AnimationDrawable资源

    AnimationDrawable资源 AnimationDrawable,代表一个动画. android既支持传统的逐帧动画(类似于电影方式,一张图片一张图片的切换),也支持通过平移.变换计算出来的 ...

  3. android学习笔记34——ClipDrawable资源

    ClipDrawable ClipDrawable代表从其他位图上截取一个“图片片段” 在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为: 以上语 ...

  4. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

  5. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  6. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

  7. 【转】Pro Android学习笔记(四):了解Android资源(下)

    处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...

  8. 【转】Pro Android学习笔记(三):了解Android资源(上)

    在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...

  9. 【转】Pro Android学习笔记(十):了解Intent(上)

    目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...

随机推荐

  1. int除以int 得到double类型值

    double serviceability =(double)(count1+count2)/sum; 需要进行强转 除数 这样得到的值就是double类型了

  2. Junit单元测试细节

    1.中心思想: 单元测试不是证明你对,而是证明你没错 2.基本注解应用 注解 使用环境 @Test 标志这个方法需要单元测试 @BeforeClass 在所有单元测试方法前执行 ps:需要是stati ...

  3. c#部分---结构体;

    结构体:自定义类型 值类型一组变量的组合需要定义的位置 class里面 main函数外面里面包含的变量可以是多种数据类型的 例如学生信息的结构体:学号,姓名,性别,分数 struct Student ...

  4. 海量字符串查找——bloom filter,c

    对于海量字符串的查找,一般有两种方法,一种是建树,还有一种就是bf算法,即布隆过滤器,这个从原来上讲比较简单,也易于实现,主要就是根据哈希算法来实现. int len(char *ch) { int ...

  5. DAG上的动态规划之嵌套矩形

    题意描述:有n个矩形,每个矩形可以用两个整数a.b描述,表示它的长和宽, 矩形(a,b)可以嵌套在矩形(c,d)当且仅当a<c且b<d, 要求选出尽量多的矩形排成一排,使得除了最后一个外, ...

  6. poj1733 带权并查集

    题意:有一个 0/1 数列,现在有n组询问和回答,表示某个区间内有奇数或者偶数个1,问到前多少个都没有逻辑错误,而下一个就不满足 可以定奇数为 1 偶数为 0作为每个元素的权值,表示它与它的祖先元素的 ...

  7. 英语语法最终珍藏版笔记-18what 从句的小结

    what 从句的小结 1.意思是“所….的事/物”, 相当于the thing(s) that…, that which…, 或those which… 可以用于以下情况: (1) 引导主语从句.如: ...

  8. 【P1835】小红花

    很简单的题,然而我没想到,在NOIP上怎么办嘛QAQ 话说这题不知道怎么分类啊……先扔到玄学里边把…… 原题: Fj在圣诞节来临之际,决定给他的奶牛发一些小红花.现在Fj一共有N头奶牛,这N头牛按照编 ...

  9. 【P1326】超级教主

    DP优化 原题: LHX教主很能跳,因为Orz他的人太多了.教主跳需要消耗能量,每跳1米就会消耗1点能量,如果教主有很多能量就能跳很高.教主为了收集能量,来到了一个神秘的地方,这个地方凡人是进不来的. ...

  10. 【转】Python numpy库的nonzero函数用法

    当使用布尔数组直接作为下标对象或者元组下标对象中有布尔数组时,都相当于用nonzero()将布尔数组转换成一组整数数组,然后使用整数数组进行下标运算. nonzeros(a) 返回数组a中值不为零的元 ...