使用xml菜单资源

使用菜单资源
java可以实现android菜单,但是android推荐使用xml来定义菜单,使用xml更好的解耦。

一,定义 菜单资源
菜单资源放置在res/menu目录下,根元素<menu .../>,<menu .../>元素无需指定任何属性。
<menu .../>包含如下子元素:
1. <item.../> 元素:定义菜单项
2.<group.../>子元素: 将多个item定义的菜单包装成一个菜单组
<group.../>子元素由于控制整组菜单的行为,该元素可制定如下常用属性:
(1) checkableBehavior : 指定菜单的选择行为。可指定none(不可选),all(多选),single(单选) 。
(2) menuCategory :对应菜单进行分类,指定菜单的优先级
(3) visible:可见性
(4) enable:指定该菜单是否可用

<item.../>元素用于定义菜单项,<item.../>元素又可包含<menu.../>元素,位于<item.../>元素内部的<menu.../>就代表了子菜单。
<item.../>元素可指定如下常用属性,
android:id : 为菜单指定id
android:title:指定菜单项的标题
android:icon:指定菜单项的图标
android:alphabeticShortcut:为菜单项指定字符串快捷键。
android:numbericShortcut:为菜单项指定数字快捷键。
android:checked:是否已经选中
android:checkable:是否可选
android:visible:是否可见
andorid:enable:是否使能

一旦在程序中定义了菜单资源后,接下来重写onCreateOptionsMenu(用于创建选项菜单)、
onCreateContextMenu(用于创建上下文菜单)方法,在这些方法调用menuInflater对象的inflate方法装载指定资源对应的菜单即可。
二,使用菜单资源
\res\menu\my_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:title="font_size"
          android:icon="@drawable/ic_launcher"
            >
        <menu>  <!-- 定义一组单选菜单  -->
            <group android:checkableBehavior="single"></group> 
		    <item android:id="@+id/font_10" android:title="font_10"></item>
		    <item android:id="@+id/font_12" android:title="font_12"></item>
		    <item android:id="@+id/font_14" android:title="font_14"></item>
		    <item android:id="@+id/font_16" android:title="font_16"></item>
		    <item android:id="@+id/font_18" android:title="font_18"></item>
     	</menu>
	</item>
	<!-- 定义一个普通菜单项 -->
    <item android:id="@+id/plain_item" android:title="plain_item"></item>  
    
    <item android:title="font_color"
          android:icon="@drawable/ic_phone_24dp"
            >
        <menu>  <!-- 定义一组单选菜单  -->
            <group>
		    <item android:id="@+id/red_font" android:title="red_font"></item>		    
		    <item android:id="@+id/green_font" android:title="green_font"></item>
		    <item android:id="@+id/blue_font" android:title="blue_font"></item>
		    </group> 
     	</menu>
	</item>
</menu>

\res\menu\my_context.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:title="font_size"
          android:icon="@drawable/ic_launcher"
            >
        <menu>  <!-- 定义一组单选菜单  -->
            <group android:checkableBehavior="single"></group> 
		    <item android:id="@+id/font_10" android:title="font_10"></item>
		    <item android:id="@+id/font_12" android:title="font_12"></item>
		    <item android:id="@+id/font_14" android:title="font_14"></item>
		    <item android:id="@+id/font_16" android:title="font_16"></item>
		    <item android:id="@+id/font_18" android:title="font_18"></item>
     	</menu>
	</item>
	<!-- 定义一个普通菜单项 -->
    <item android:id="@+id/plain_item" android:title="plain_item"></item>  
    
    <item android:title="font_color"
          android:icon="@drawable/ic_phone_24dp"
            >
        <menu>  <!-- 定义一组单选菜单  -->
            <group>
		    <item android:id="@+id/red_font" android:title="red_font"></item>		    
		    <item android:id="@+id/green_font" android:title="green_font"></item>
		    <item android:id="@+id/blue_font" android:title="blue_font"></item>
		    </group> 
     	</menu>
	</item>
</menu>

\res\layout\activity_main.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.menutest.MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="52dp"
        android:layout_marginTop="70dp"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:layout_marginLeft="18dp"
        android:layout_marginTop="31dp"
        android:text="menu text2" />

</RelativeLayout>
MainActivity.java

package com.example.menutest;

import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.view.View.OnCreateContextMenuListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
    final int FONT_10 = 0x111 ;
    final int FONT_12 = 0x112 ;
    final int FONT_14 = 0x113 ;
    final int FONT_16 = 0x114 ;
    final int FONT_18 = 0x115 ;
    // define common menu  idify
    final int PLAIN_ITEM = 0x11b ;
    //define text color 
    final int FONT_RED = 0x116 ;    
    final int FONT_GREEN = 0x117 ;    
    final int FONT_BLUE= 0x118 ;   
    
    final int MALE= 0x120 ; 
    final int FEMALE= 0x121 ; 
    
    private EditText edit ;
    private TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = (EditText) findViewById(R.id.editText1);
        
        edit.setText("menu text");
        
        text = (TextView) findViewById(R.id.textView1);        
        registerForContextMenu(text);
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        unregisterForContextMenu(text);
        super.onDestroy();
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        
        // TODO Auto-generated method stub
        //super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.my_context, menu);
        menu.setHeaderIcon(R.drawable.ic_phone_24dp);
        menu.setHeaderTitle("please select color!");
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
//        getMenuInflater().inflate(R.menu.main, menu);
//        return true;
/*        SubMenu fontMenu = menu.addSubMenu("font size");
        fontMenu.setIcon(R.drawable.ic_launcher);
        fontMenu.setHeaderIcon(R.drawable.ic_launcher);
        fontMenu.add(0, FONT_10, 0, "10 size font");
        fontMenu.add(0, FONT_12, 0, "12 size font");
        fontMenu.add(0, FONT_14, 0, "14 size font");
        fontMenu.add(0, FONT_16, 0, "16 size font");
        fontMenu.add(0, FONT_18, 0, "18 size font");
        
        menu.add(0, PLAIN_ITEM, 0, "common menu");
        
        SubMenu colorMenu = menu.addSubMenu("font color");
        colorMenu.setIcon(R.drawable.ic_phone_24dp);
        colorMenu.setHeaderIcon(R.drawable.ic_phone_24dp);
        colorMenu.add(0,FONT_RED,0,"red");
        colorMenu.add(0,FONT_GREEN,0,"green");
        colorMenu.add(0,FONT_BLUE,0,"blue");
        
        return super.onCreateOptionsMenu(menu);*/
        /*
        SubMenu fontMenu = menu.addSubMenu("font size");
        fontMenu.setIcon(R.drawable.ic_launcher);
        fontMenu.setHeaderIcon(R.drawable.ic_launcher);
        MenuItem Font10 = fontMenu.add("10 size font");
        MenuItem Font12 = fontMenu.add("12 size font");
        MenuItem Font14 = fontMenu.add("14 size font");
        MenuItem Font16 = fontMenu.add("16 size font");
        MenuItem Font18 = fontMenu.add("18 size font");
        Font10.setOnMenuItemClickListener( new OnMenuItemClickListener() {
            
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                edit.setTextSize(10*2);

                return false;
            }
        });
        
        Font12.setOnMenuItemClickListener( new OnMenuItemClickListener() {
            
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                edit.setTextSize(12*2);
                
                return false;
            }
        });
        */
        /*  4
        SubMenu startAcitvityMenu = menu.addSubMenu("start activity");   
        startAcitvityMenu.setIcon(R.drawable.ic_launcher);
        startAcitvityMenu.setHeaderIcon(R.drawable.ic_phone_24dp);
        startAcitvityMenu.setHeaderTitle("activity");
        
        MenuItem startActivityItem = startAcitvityMenu.add("see activity");
        
        startActivityItem.setIntent(new Intent(this, other.class));*/
        
      getMenuInflater().inflate(R.menu.my_menu, menu);
      return true;
        
        //return super.onCreateOptionsMenu(menu);        
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.font_10:
                edit.setTextSize(10*2);
                break;

            case R.id.font_12:
                edit.setTextSize(12*2);                
                break;
                
            case R.id.font_14:
                edit.setTextSize(14*2);                     
                break;
                
            case R.id.font_16:
                edit.setTextSize(16*2);                     
                break;
                
            case R.id.font_18:
                edit.setTextSize(18*2);                     
                break;
                
            case R.id.red_font:
                edit.setTextColor(Color.RED);
                break;         
                
            case R.id.green_font:
                edit.setTextColor(Color.GREEN);                
                break;      
                
            case R.id.blue_font:
                edit.setTextColor(Color.BLUE);                
                break;                    
                                            
            case R.id.plain_item:
                Toast.makeText(this, "你点击该普通菜单", 3000).show();                
                break;                
                
        }
        
        return true ;
    }
    
@Override
public boolean onContextItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.red:
        text.setTextColor(Color.RED);
        item.setChecked(true);
        break;         
        
    case R.id.green:
        text.setTextColor(Color.GREEN);                
        item.setChecked(true);
        break;      
        
    case R.id.blue:
        text.setTextColor(Color.BLUE);                
        item.setChecked(true);
        break;   
    }
   // return super.onContextItemSelected(item);
    return true;
}
  /*  @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
//        int id = item.getItemId();
//        if (id == R.id.action_settings) {
//            return true;
//        }
//        return super.onOptionsItemSelected(item);
        switch (item.getItemId()) {
            case FONT_10 : 
                edit.setTextSize(10*2);
                break;
            case FONT_12 : 
                edit.setTextSize(12*2);
                break;
            case FONT_14 : 
                edit.setTextSize(14*2);
                break;
            case FONT_16 : 
                edit.setTextSize(16*2);
                break;
            case FONT_18 : 
                edit.setTextSize(18*2);
                break;
            case FONT_RED : 
                edit.setTextColor(Color.RED);
                break;
            case FONT_GREEN : 
                edit.setTextColor(Color.GREEN);
                break;
            case FONT_BLUE : 
                edit.setTextColor(Color.BLUE);
                break;

            case PLAIN_ITEM : 
                Toast.makeText(this, "you click common menu", Toast.LENGTH_LONG).show();
                break;
        }
        return true ;
    }
    */
}

效果如下:











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值