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 ...
随机推荐
- 关于typedef的用法总结(转)
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中.typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些 ...
- 225. Implement Stack using Queues
代码如下: class MyStack { // Push element x onto stack. Queue<Integer> queue=new ArrayDeque<> ...
- 正确答案 全国信息学奥林匹克联赛( ( NOIP2014) 复 赛 模拟题 Day1 长乐一中
[题目描述]小 H 与小 Y 刚刚参加完 UOIP 外卡组的初赛,就迫不及待的跑出考场对答案."吔,我的答案和你都不一样!",小 Y 说道,"我们去找神犇们问答案吧&qu ...
- Unable to get valid context for root
登陆时报以下错误Unable to get valid context for rootLast login: Wed Jul 24 02:06:01 2013 from 10.64.41.3 单机模 ...
- PHP浮点型
<?php$num_float1 = 1.234; //小数点echo $num_float1;echo "<br />";$num_float2 = 1. ...
- java的nio之:unix内核的五种I/O通信模型
一:根据unix的网络编程对I/O模型的分类,UNIX提供了5种I/O模型===>阻塞I/O模型:最常用的I/O模型.所有文件操作都是阻塞的.我们以套接字接口为例讲解此模型:在进程空间中调用re ...
- C#的157个建议--读书笔记(一)
操作符的重载 ----实现类对象可以像值类型那样进行操作符的操作 实现比较器(IComparable)---实现对象的排序方式 协变:让返回值类型返回比声明的类型派生程度更大的类型:协变支持的两种方式 ...
- js定义变量需赋予初始值
这是console.log打印出来的日志,就是多了一个undefined 日志: hitTableObjectID:undefinedbfa4be7b-32fc-459a-9092-ecde316b3 ...
- vb6中webbrowser控件树转换备忘
Dim doc As HTMLDocument Set doc = WebBrowser1.Document Dim inputs As IHTMLElementCollection Set inpu ...
- IIS_PUT
[*] Put file success http://58.16.95.114:80/1470546504.01.txt [*] Put file success http://58.17.121. ...