参考《疯狂android讲义》2.10节 P174,参见归档project:XmlMenuDemo.zip

一般推荐使用XML文件定义菜单。

基本步骤如下:

1、定义布局文件

为简单显示原理,本布局只有一个EditText

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10.  
  11. <EditText
  12. android:id="@+id/et_hello_world"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:hint="@string/hello_world" />
  16.  
  17. </RelativeLayout>

2、定义菜单资源文件

(1)选项菜单文件

  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  2.  
  3. <!-- 注意:string的第一个字母为小写,string.xml文件中也是!!! -->
  4. <item android:title="@string/menu_font_size">
  5. <menu>
  6. <group android:checkableBehavior="single" >
  7. <item
  8. android:id="@+id/font_10"
  9. android:title="@string/font_10"
  10. />
  11. <item
  12. android:id="@+id/font_20"
  13. android:title="@string/font_20"/>
  14. <item
  15. android:id="@+id/font_30"
  16. android:title="@string/font_30"/>
  17. <item
  18. android:id="@+id/font_40"
  19. android:title="@string/font_40"/>
  20. </group>
  21. </menu>
  22. </item>
  23.  
  24. <item
  25. android:title="@string/plain_menu"
  26. android:id="@+id/menu_plain_menu"
  27. />
  28.  
  29. </menu>

(2)上下文菜单文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  3.  
  4. <!-- 注意:string的第一个字母为小写,string.xml文件中也是!!! -->
  5.  
  6. <group android:checkableBehavior="single" >
  7. <item
  8. android:id="@+id/font_red"
  9. android:alphabeticShortcut="r"
  10. android:title="@string/red"/>
  11. <item
  12. android:id="@+id/font_green"
  13. android:alphabeticShortcut="r"
  14. android:title="@string/green"/>
  15. <item
  16. android:id="@+id/font_blue"
  17. android:alphabeticShortcut="r"
  18. android:title="@string/blue"/>
  19. </group>
  20. </menu>

3、重写onCreateOptionMenu及onCreateContextMenu

4、为组件注册上下文菜单(仅适用于ContextMenu)

5、定义菜单被单击时触发的方法

  1. package com.ljh.xmlmenudemo;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.graphics.Color;
  6. import android.view.ContextMenu;
  7. import android.view.Menu;
  8. import android.view.MenuItem;
  9. import android.view.View;
  10. import android.view.ContextMenu.ContextMenuInfo;
  11. import android.widget.EditText;
  12. import android.widget.Toast;
  13.  
  14. public class MainActivity extends Activity {
  15.  
  16. private EditText etHelloWorld;
  17.  
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22. etHelloWorld = (EditText) findViewById(R.id.et_hello_world);
  23. registerForContextMenu(etHelloWorld);
  24. }
  25.  
  26. @Override
  27. public boolean onCreateOptionsMenu(Menu menu) {
  28. // Inflate the menu; this adds items to the action bar if it is present.
  29. getMenuInflater().inflate(R.menu.main, menu);
  30. return true;
  31. }
  32.  
  33. @Override
  34. public void onCreateContextMenu(ContextMenu menu, View v,
  35. ContextMenuInfo menuInfo) {
  36.  
  37. getMenuInflater().inflate(R.menu.context, menu);
  38. super.onCreateContextMenu(menu, v, menuInfo);
  39. }
  40.  
  41. @Override
  42. public boolean onOptionsItemSelected(MenuItem item) {
  43. switch (item.getItemId()) {
  44. // 普通箱单被点击处所进行的操作。
  45. case R.id.menu_plain_menu:
  46. Toast.makeText(this, "你单击了普通菜单", Toast.LENGTH_LONG).show();
  47. break;
  48. // 为子菜单的子项定义被点击时所进行的操作。
  49. case R.id.font_10:
  50. etHelloWorld.setTextSize(10);
  51. break;
  52. case R.id.font_20:
  53. etHelloWorld.setTextSize(20);
  54. break;
  55. case R.id.font_30:
  56. etHelloWorld.setTextSize(30);
  57. break;
  58. case R.id.font_40:
  59. etHelloWorld.setTextSize(40);
  60. break;
  61. }
  62. return super.onOptionsItemSelected(item);
  63. }
  64.  
  65. @Override
  66. public boolean onContextItemSelected(MenuItem item) {
  67. item.setChecked(true);
  68. switch (item.getItemId()) {
  69. case R.id.font_red:
  70. item.setChecked(true);
  71. etHelloWorld.setBackgroundColor(Color.RED);
  72. break;
  73. case R.id.font_green:
  74. item.setChecked(true);
  75. etHelloWorld.setBackgroundColor(Color.GREEN);
  76. break;
  77. case R.id.font_blue:
  78. item.setChecked(true);
  79. etHelloWorld.setBackgroundColor(Color.BLUE);
  80. break;
  81. }
  82. return super.onContextItemSelected(item);
  83. }
  84.  
  85. }

版权声明:本文为博主原创文章,未经博主允许不得转载。

菜单之二:使用xml文件定义菜单 分类: H1_ANDROID 2013-11-03 09:39 1038人阅读 评论(0) 收藏的更多相关文章

  1. iOS开源库--最全的整理 分类: ios相关 2015-04-08 09:20 486人阅读 评论(0) 收藏

    youtube下载神器:https://github.com/rg3/youtube-dl 我擦咧 vim插件:https://github.com/Valloric/YouCompleteMe vi ...

  2. iOS 消息推送原理及实现总结 分类: ios技术 2015-03-01 09:22 70人阅读 评论(0) 收藏

    在实现消息推送之前先提及几个于推送相关概念,如下图: 1. Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服 ...

  3. 服务器证书安装配置指南(IIS7.5) 分类: ASP.NET 2014-11-05 12:39 105人阅读 评论(0) 收藏

    1.启动IIS管理器,点击开始菜单->所有程序->管理工具->Internet信息服务(IIS)管理器: 2.选择"服务器证书": 3.在右边窗口,选择" ...

  4. Hdu 1507 Uncle Tom's Inherited Land* 分类: Brush Mode 2014-07-30 09:28 112人阅读 评论(0) 收藏

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  5. Poj 1050 分类: Translation Mode 2014-04-04 09:31 103人阅读 评论(0) 收藏

    To the Max Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39058   Accepted: 20629 Desc ...

  6. Jquery easy UI 上中下三栏布局 分类: ASP.NET 2015-02-06 09:19 368人阅读 评论(0) 收藏

    效果图: 源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  7. C# IIS应用程序池辅助类 分类: C# Helper 2014-07-19 09:50 249人阅读 评论(0) 收藏

    using System.Collections.Generic; using System.DirectoryServices; using System.Linq; using Microsoft ...

  8. PIGS 分类: POJ 图论 2015-08-10 09:15 3人阅读 评论(0) 收藏

    PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18209 Accepted: 8277 Description Mir ...

  9. Babelfish 分类: 哈希 2015-08-04 09:25 2人阅读 评论(0) 收藏

    Babelfish Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 36398 Accepted: 15554 Descripti ...

随机推荐

  1. Echarts Y轴min显示奇葩问题(做此记录)

    项目需求是根据不同情况显示最大值最小值   有9-35  12-50 9-50 三种情况 前面两种可以显示出来  但是9-50的话  最小值9显示不出来  8,7等就可以显示出来 后面想到强制从最小值 ...

  2. C++编码优化之减少冗余拷贝或赋值

    临时变量 目前遇到的一些产生临时变量的情况:函数实参.函数返回值.隐式类型转换.多余的拷贝 1. 函数实参 这点应该比较容易理解,函数参数,如果是实参传递的话,函数体里的修改并不会影响调用时传入的参数 ...

  3. MySQL 汉字拼音

    http://blog.csdn.net/u012076316/article/details/54951365 http://www.cnblogs.com/diony/p/5483108.html ...

  4. jquery ui 分页插件 传入后台的连个參数名

    參数名: page .rows page=int(request.form.get('page',1).encode('u8')) rows1=int(request.form.get('rows', ...

  5. HTML基础第十二讲---链接标志

    转自:https://i.cnblogs.com/posts?categoryid=1121494 没有链接,WWW将失去存在的意义!WWW之所以受欢迎,乃在于她除了有精美的图文之外,更有方便且多样化 ...

  6. 洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares

    P1206 [USACO1.2]回文平方数 Palindromic Squares 题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2< ...

  7. JS概述

             从Asp.NET跨越到JavaScript.这既是一个新的领域也是一个非常熟悉的地方,新是由于不知道什么是JavaScript,首先来了解一下什么是JavaScript.       ...

  8. C# 进制转换 在什么情况下使用16进制,字节数组,字符串

    C# 进制转换 Admin2013年9月18日 名人名言:从工作里爱了生命,就是通彻了生命最深的秘密.——纪伯伦 1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Con ...

  9. 重构——DataTable转泛型

         泛型简单介绍         泛型能够最大限度的重用代码.保护类型的安全.提高性能.         泛型最常见的用途是创建集合类         泛型数据类型中使用的信息可在执行时通过反射 ...

  10. js匿名函数(变量加括号就是函数)

    js匿名函数(变量加括号就是函数) 一.总结 变量加括号就是函数,而函数的括号是用来传参的 1.类比:以正常函数去想匿名函数,匿名函数比正常函数只是少了函数名,本质还是一样,该怎么传参还是怎么传参,小 ...