Android里面用XML定义菜单资源

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

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

<?xml version="1。0" encoding="utf-8"?> 
 <menu xmlns:android="http://schemas。android。com/apk/res/android" > 
 <item android:title="@string/font_size" 
 android:icon="@drawable/font"
 <menu> 
 <!--  定义一组单选菜单项 --> 
 <group android:checkableBehavior="single"
 <!-- 定义多个菜单项 --> 
 <item android:id="@+id/font_10" 
 android:title="@string/font_10"/> 
 <item android:id="@+id/font_12" 
 android:title="@string/font_12"/> 
 <item android:id="@+id/font_14" 
 android:title="@string/font_14"/> 
 <item android:id="@+id/font_16" 
 android:title="@string/font_16"/> 
 <item android:id="@+id/font_18" 
 android:title="@string/font_18"/> 
 </group> 
 </menu> 
 </item> 
 <item> 
 </item> 
 <!-- 定义一个普通菜单项 --> 
 <item android:id="@+id/plain_item" 
 android:title="@string/plain_item"
 </item> 
 <item android:id="@string/font_color" 
 android:title="@drawable/color"
 <menu> 
 <!-- 定义一组普通的菜单项 --> 
 <group> 
 <!-- 定义3个菜单项 --> 
 <item android:id="@+id/red_font" 
 android:title="@string/red_title"/> 
 <item android:id="@+id/green_font" 
 android:title="@string/green_title"/> 
 <item android:id="@+id/blue_font" 
 android:title="@string/blue_title"/> 
 </group> 
 </menu> 
 </item> 
 </menu> 
  • 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.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

context.xml为ContextMenu

<?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/red" 
android:title="@string/red_title" 
android:alphabeticShortcut="r"></item> 
<item android:id="@+id/green" 
android:title="@string/green_title" 
android:alphabeticShortcut="g"></item> 
<item android:id="@+id/blue" 
android:title="@string/blue_title" 
android:alphabeticShortcut="b"></item> 
</group> 
</menu> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

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

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

strings.xml

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

下面代码将实现两种菜单

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

MTK开发菜单

2009-01-19 10:03:58

C#XML动态分层菜单

2011-04-25 14:26:32

Ubuntu菜单

2022-05-18 07:44:13

自定义菜单前端

2013-06-09 12:49:15

Android开发XML读写XML解析

2013-06-09 13:07:23

Android开发XML读写XML解析

2013-06-09 10:04:35

Android开发XML读写XML解析

2013-06-09 12:53:05

Android开发XML读写XML解析

2013-06-08 11:04:18

Android开发Pull解析XMLAndroid XML

2013-06-09 10:37:53

Android开发XML读写XML解析

2013-06-09 10:18:29

Android开发XML读写XML解析

2013-06-09 10:25:56

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

51CTO技术栈公众号