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 ...
随机推荐
- 如何禁用ListView中的选中效果
有的时候,我们希望ListView没有选中效果. 导致选中效果出现可能有两方面的原因: 1.每一行View自身可能有选中效果,可以将它的背景设置为透明 2.ListView有一个listSelecto ...
- c 函数及指针学习 6
不完整声明 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 /* 方法一 */ struct tag_a{ ...
- 通过ros节点发布Twist Messages控制机器人--10
原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.到目前为止,我们已经从命令行移动机器人,但大多数时间你将依靠一个ros节点发布适当的Twist消息. ...
- 工作中遇到的问题--JPA 一对多查询
/** * order by gs.updateDate desc * SELECT gs FROM GoodStatus gs WHERE gs IN( * @ ...
- K650D安装黑苹果
1.需要UEFI+GPT模式的win8或win10 2.关闭UEFI模式,进PE,分一个400M的分区,格式化为FAT16或EFI模式 3.制作clover模式的MAC安装U盘:链接: http:// ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 解决办法
增加IsHandleCreated 判断 if (this.IsHandleCreated) { this.Invoke(new EventHandler(delegate { ...... })); ...
- java的nio之:java的nio系列教程之serverSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样.ServerSocketChannel类在 jav ...
- mysql中的semi-join
1. 背景介绍 什么是semi-join? 所谓的semi-join是指semi-join子查询. 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录.与条件连接相 ...
- 虚拟化之vmware DirectPath I/O
首先Intel这边,必须CPU支持VT-D,基本就是i5/i7的型号,而且部分i5中低端型号还不支持,带K的不支持.同时主板要开启VT-D支持,这些从775时代开始就有了,所以型号搭配复杂.AMD那边 ...
- unity, 用unity profiler进行真机profile,需要退出360
用unity profiler进行真机profile,需要退出360.