Android里面用XML定义菜单资源

移动开发 Android
本文介绍了Android里面如何用XML定义菜单资源,菜单分两种,一种是OptionMenu(点系统"Menu"键出来),一种是ContextMenu。

Android里面也可用XML定义菜单资源,菜单分两种,一种是OptionMenu(点系统"Menu"键出来),一种是ContextMenu
下面定义两种菜单XML到res\menu文件夹下
my_menu为OptionMenu

  1. <?xml version="1。0" encoding="utf-8"?> 
  2.  <menu xmlns:android="http://schemas。android。com/apk/res/android" > 
  3.  <item android:title="@string/font_size" 
  4.  android:icon="@drawable/font"
  5.  <menu> 
  6.  <!--  定义一组单选菜单项 --> 
  7.  <group android:checkableBehavior="single"
  8.  <!-- 定义多个菜单项 --> 
  9.  <item android:id="@+id/font_10" 
  10.  android:title="@string/font_10"/> 
  11.  <item android:id="@+id/font_12" 
  12.  android:title="@string/font_12"/> 
  13.  <item android:id="@+id/font_14" 
  14.  android:title="@string/font_14"/> 
  15.  <item android:id="@+id/font_16" 
  16.  android:title="@string/font_16"/> 
  17.  <item android:id="@+id/font_18" 
  18.  android:title="@string/font_18"/> 
  19.  </group> 
  20.  </menu> 
  21.  </item> 
  22.  <item> 
  23.  </item> 
  24.  <!-- 定义一个普通菜单项 --> 
  25.  <item android:id="@+id/plain_item" 
  26.  android:title="@string/plain_item"
  27.  </item> 
  28.  <item android:id="@string/font_color" 
  29.  android:title="@drawable/color"
  30.  <menu> 
  31.  <!-- 定义一组普通的菜单项 --> 
  32.  <group> 
  33.  <!-- 定义3个菜单项 --> 
  34.  <item android:id="@+id/red_font" 
  35.  android:title="@string/red_title"/> 
  36.  <item android:id="@+id/green_font" 
  37.  android:title="@string/green_title"/> 
  38.  <item android:id="@+id/blue_font" 
  39.  android:title="@string/blue_title"/> 
  40.  </group> 
  41.  </menu> 
  42.  </item> 
  43.  </menu> 

context.xml为ContextMenu

  1. <?xml version="1。0" encoding="utf-8"?> 
  2. <menu xmlns:android="http://schemas。android。com/apk/res/android" > 
  3. <!-- 定义一组单选菜单项目 --> 
  4. <group android:checkableBehavior="single"
  5. <!-- 定义三个菜单项 --> 
  6. <item android:id="@+id/red" 
  7. android:title="@string/red_title" 
  8. android:alphabeticShortcut="r"></item> 
  9. <item android:id="@+id/green" 
  10. android:title="@string/green_title" 
  11. android:alphabeticShortcut="g"></item> 
  12. <item android:id="@+id/blue" 
  13. android:title="@string/blue_title" 
  14. android:alphabeticShortcut="b"></item> 
  15. </group> 
  16. </menu> 

定义两个res\value下的xml,用来指定颜色,字体

  1. <?xml version="1。0" encoding="UTF-8"?> 
  2. <resources> 
  3. <color name="red">#ff0000</color> 
  4. <color name="green">#00ff00</color> 
  5. <color name="blue">#0000ff</color> 
  6. </resources> 

strings.xml

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <resources>   
  3.     <string name="hello">Hello World, ContextMenuTest!</string>   
  4.     <string name="app_name">上下文菜单</string>   
  5.     <string name="red_title">红色</string>   
  6.     <string name="blue_title">蓝色</string>   
  7.     <string name="green_title">绿色</string>   
  8.     <string name="font_size">字体大小</string>   
  9.     <string name="font_color">字体颜色</string>       
  10.     <string name="plain_item">普通菜单项</string>   
  11.     <string name="font_10">10号字体</string>      
  12.     <string name="font_12">12号字体</string>      
  13.     <string name="font_14">14号字体</string>      
  14.     <string name="font_16">16号字体</string>      
  15.     <string name="font_18">18号字体</string>      
  16. </resources>   

下面代码将实现两种菜单

  1. package WangLi.Resource.MenuResTest;   
  2. import android.app.Activity;   
  3. import android.graphics.Color;   
  4. import android.os.Bundle;   
  5. import android.view.ContextMenu;   
  6. import android.view.Menu;   
  7. import android.view.MenuInflater;   
  8. import android.view.MenuItem;   
  9. import android.view.View;   
  10. import android.widget.TextView;   
  11. import android.widget.Toast;   
  12. public class MenuResTest extends Activity {   
  13.     /** Called when the activity is first created. */   
  14.     private TextView txt;   
  15.     @Override   
  16.     public void onCreate(Bundle savedInstanceState) {   
  17.         super.onCreate(savedInstanceState);   
  18.         setContentView(R.layout.main);   
  19.         txt = (TextView)findViewById(R.id.txt);   
  20.         //为文本框注册上下文菜单    
  21.         registerForContextMenu(txt);   
  22.     }   
  23.     public boolean onCreateOptionsMenu(Menu menu)   
  24.     {   
  25.         MenuInflater inflator = new MenuInflater(this);   
  26.         //装填R.menu.my_menu对应的菜单,并添加到menu中    
  27.         inflator.inflate(R.menu.my_menu, menu);   
  28.         return super.onCreateOptionsMenu(menu);   
  29.     }   
  30.     //每次创建上下文菜单时都会触发该方法    
  31.     public void onCreateContextMenu(ContextMenu menu,View source,   
  32.             ContextMenu.ContextMenuInfo menuInfo)   
  33.     {   
  34.         MenuInflater inflator = new MenuInflater(this);   
  35.         //装填R.menu.context对应的菜单,并添加到menu中    
  36.         inflator.inflate(R.menu.context, menu);   
  37.         menu.setHeaderIcon(R.drawable.tools);   
  38.         menu.setHeaderTitle("请选择背景色");   
  39.     }   
  40.     //上下文菜单中菜单项被单击时触发该方法    
  41.     public boolean onContextItemSelected(MenuItem mi)   
  42.     {   
  43.         switch(mi.getItemId())   
  44.         {   
  45.             case R.id.red:   
  46.                 mi.setChecked(true);   
  47.                 txt.setBackgroundColor(Color.RED);   
  48.                 break;   
  49.             case R.id.green:   
  50.                 mi.setChecked(true);   
  51.                 txt.setBackgroundColor(Color.GREEN);   
  52.                 break;   
  53.             case R.id.blue:   
  54.                 mi.setChecked(true);   
  55.                 txt.setBackgroundColor(Color.BLUE);   
  56.                 break;   
  57.         }   
  58.         return true;   
  59.     }   
  60.     //菜单项被单击后的回调方法    
  61.     public boolean onOptionsItemSelected(MenuItem mi)   
  62.     {   
  63.         //判断单击的是哪个菜单项,并针对性地做出响应    
  64.         switch(mi.getItemId())   
  65.         {   
  66.             case R.id.font_10:   
  67.                 txt.setTextSize(10*2);   
  68.                 break;   
  69.             case R.id.font_12:   
  70.                 txt.setTextSize(12*2);   
  71.                 break;   
  72.             case R.id.font_14:   
  73.                 txt.setTextSize(14*2);   
  74.                 break;   
  75.             case R.id.font_16:   
  76.                 txt.setTextSize(16*2);   
  77.                 break;   
  78.             case R.id.font_18:   
  79.                 txt.setTextSize(18*2);   
  80.                 break;   
  81.             case R.id.red_font:   
  82.                 txt.setTextColor(Color.RED);   
  83.                 mi.setChecked(true);   
  84.                 break;   
  85.             case R.id.green_font:   
  86.                 txt.setTextColor(Color.GREEN);   
  87.                 mi.setChecked(true);   
  88.                 break;   
  89.             case R.id.blue_font:   
  90.                 txt.setTextColor(Color.BLUE);   
  91.                 mi.setChecked(true);   
  92.                 break;   
  93.             case R.id.plain_item:   
  94.                 Toast toast = Toast.makeText(MenuResTest.this"您单击了普通项菜单", Toast.LENGTH_SHORT);   
  95.                 toast.show();   
  96.                 break;   
  97.         }   
  98.         return true;   
  99.     }   
  100. }   

下面是程序运行效果图,刚启动时是一个TextView

点击后,在手机屏幕下方出现OptionMenu

点击字体大小或普通菜单项,出现子菜单

选择就可改变TextView的字体

如下点击"普通菜单项",会出现一个Toast提示,过几秒就会消失

那么怎么弹出ContextMenu呢,就是对着TextView长按就可以了

选择后,背景色就改变了

责任编辑:闫佳明 来源: my.eoe.cn
相关推荐

2013-06-08 12:49:03

Android开发XML定义菜单

2013-04-01 14:35:10

Android开发Android自定义x

2015-02-12 15:33:43

微信SDK

2015-02-12 15:38:26

微信SDK

2010-09-28 14:27:35

SQL定义Xml

2010-01-27 10:21:00

Android菜单

2013-06-08 13:02:11

Android开发XML解析

2011-07-06 14:48:17

FOR XML PATXML

2011-04-25 14:26:32

Ubuntu菜单

2022-05-18 07:44:13

自定义菜单前端

2011-08-30 16:43:46

MTK开发菜单

2009-01-19 10:03:58

C#XML动态分层菜单

2013-06-09 10:25:56

Android开发XML读写XML解析

2013-06-09 11:31:13

Android开发XML读写XML解析

2013-06-09 10:37:53

Android开发XML读写XML解析

2013-06-09 10:18:29

Android开发XML读写XML解析

2013-06-08 11:04:18

Android开发Pull解析XMLAndroid XML

2013-06-09 10:04:35

Android开发XML读写XML解析

2013-06-09 13:07:23

Android开发XML读写XML解析

2013-06-09 12:49:15

Android开发XML读写XML解析
点赞
收藏

51CTO技术栈公众号