Android里面用XML定义菜单资源

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>  
<?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>
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>  
<?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>
定义两个res\value下的xml,用来指定颜色,字体

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

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



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

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

选择就可改变TextView的字体

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

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

选择后,背景色就改变了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值