通过xml文件定义菜单

本文详细介绍了如何通过XML文件定义菜单,并在Activity中引用菜单资源,实现为TextView设置多种属性,包括字体大小、颜色等。同时,文章还展示了如何为TextView注册上下文菜单,并为菜单项绑定监听器,以实现用户交互。

通过xml文件定义菜单,并在Activity中引用菜单资源,并为菜单项绑定监听器,实现为TextView设置各种属性。

上下文菜单的xml资源文件,context.xml:

<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>

菜单项资源文件,my_menu.xml:

<?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>
                <item 
                    android:id="@+id/font_12"
                    android:title="@string/font_12"
                    ></item>
                <item 
                    android:id="@+id/font_14"
                    android:title="@string/font_14"
                    ></item>
                <item 
                    android:id="@+id/font_16"
                    android:title="@string/font_16"
                    ></item>
                <item 
                    android:id="@+id/font_18"
                    android:title="@string/font_18"
                    ></item>
            </group>
        </menu>
    </item>
    <!-- 定义一个普通菜单项 -->
	<item 
	    android:id="@+id/plain_item"
	    android:title="@string/plain_item"
	    />
	<item 
	    android:id="@+id/font_color"
	    android:title="@string/font_color"
	    android:icon="@drawable/color"	    
	    >
	    <menu>
	        <!-- 定义一组允许复选的菜单项 -->
	        <group android:checkableBehavior="single">
	        <item 
	            android:id="@+id/red"
	            android:title="@string/red_title"
	            />
	        <item 
	            android:id="@+id/green"
	            android:title="@string/green_title"
	            />
	        <item 
	            android:id="@id/blue"
	            android:title="@string/blue_title"
	            /> 
	        </group>
	    </menu>
	</item>
</menu>

Activity代码:

package com.example.menurestest;

import android.os.Bundle;

public class MenuResTest extends Activity {
	
	

	private TextView txt;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu_res_test);
        txt=(TextView)findViewById(R.id.txt);
        //为文本框注册上下文菜单
        registerForContextMenu(txt);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //添加菜单资源的方法一
    	getMenuInflater().inflate(R.menu.my_menu, menu);
        return true;
    }
    //每次 创建上下文菜单时都会触发该方法

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// TODO Auto-generated method stub
		//添加菜单资源的方法二
		MenuInflater inflater=new MenuInflater(this);
		inflater.inflate(R.menu.context, menu);
		menu.setHeaderIcon(R.drawable.tools);
		menu.setHeaderTitle("请选择背景色");
		menu.setGroupCheckable(1, true, true);
		
	}
	//上下文菜单项被单击时触发该方法
    @Override
	public boolean onContextItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
    	switch(item.getItemId()){
    	case R.id.red:
    		item.setChecked(true);
    		txt.setBackgroundColor(Color.RED);
    		break;
    	case R.id.green:
    		item.setChecked(true);
    		txt.setBackgroundColor(Color.GREEN);
    		break;
    	case R.id.blue:
    		item.setChecked(true);
    		txt.setBackgroundResource(Color.BLUE);
    		break;
    	}
		return super.onContextItemSelected(item);
	}
    @Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
    	switch(item.getItemId()){
    	case R.id.font_10:
    		item.setChecked(true);
    		txt.setTextSize(10*2);
    		break;
    	case R.id.font_12:
    		item.setChecked(true);
    		txt.setTextSize(12*2);
    		break;
    	case R.id.font_14:
    		item.setChecked(true);
    		txt.setTextSize(14*2);
    		break;
    	case R.id.font_16:
    		item.setChecked(true);
    		txt.setTextSize(16*2);
    		break;
    	case R.id.font_18:
    		txt.setTextSize(18*2);
    		item.setChecked(true);item.setChecked(true);
    		break;
    	case R.id.red:
    		txt.setTextColor(Color.RED);
    		item.setChecked(true);
    		break;
    	case R.id.blue:
    		txt.setTextColor(Color.BLUE);
    		item.setChecked(true);
    		break;
    	case R.id.green:
    		item.setChecked(true);
    		txt.setTextColor(R.color.green);

    		break;
    	case R.id.plain_item:
    		Toast.makeText(MenuResTest.this, "您单击了普通菜单", Toast.LENGTH_SHORT).show();
    		break;
    	}
		return super.onOptionsItemSelected(item);
	}


    
}
运行结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值