第35章:使用xml文件定义菜单Menu并设置监听事件

我们都知道在Java代码中也可以定义菜单,但是这样会使得代码看起来太过臃肿,并不符合我们编程的一贯原则,所以,Android中也提供了在xml文件中定义菜单。

xml定义菜单不但可以是代码简洁化,并且看起来更加清除容易理解,废话不多说,我们来看下它的一些属性:

首先声明:菜单文件在Android中是有它确定的地方的,就是Android资源文件夹下的Menu文件夹下面,没有的话可以创建一个Android资源文件夹。

在xml文件中,菜单的根元素是<menu></menu>,在其中可以包含<item></item>和<group></group>

在group中可以指定以下属性:

1、checkableBehavior:指定该组菜单的选择行为。可指定为none(不可选),all(多选),single(单选)

2、menuCategory:对菜单进行分类,指定菜单的优先级。值为:container、system、secondary、alternative

3、visible:指定该组菜单是否可见

4、enable:指定该组菜单是否可用

在item中可以定义以下属性:

1、android:id

2、android:title

3、android:icon

4、android:alphabeticShortcut:为菜单指定快捷键

5、android:numericShortcut:为菜单指定数字快捷键

6、android:checkable:设置该菜单项是否可选

7、android:checked:设置该菜单是否已选中

8、android:visible:设置该菜单项是否可见

9、android:enable:设置该菜单项是否可用

下面我们来看个实例:

string.xml

<resources>
    <string name="app_name">My Application</string>

    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
    <string name="font_size">请选择字号</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>
    <string name="plain_item">普通菜单项</string>
    <string name="font_color">请选择颜色</string>
    <string name="font_red">红色</string>
    <string name="font_blue">蓝色</string>
    <string name="font_yellow">黄色</string>
</resources>

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=".MainActivity">
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
</RelativeLayout>

menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item
        android:icon="@drawable/ic_launcher"
        android:title="@string/font_size">
        <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>
    <item android:title="@string/font_color">
        <menu>
            <group>
                <item
                    android:id="@+id/font_red"
                    android:title="@string/font_red">

                </item>
                <item
                    android:id="@+id/font_blue"
                    android:title="@string/font_blue">

                </item>
                <item
                    android:id="@+id/font_yellow"
                    android:title="@string/font_yellow">

                </item>
            </group>
        </menu>
    </item>
</menu>

context.xml

<?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/font_red"
            android:alphabeticShortcut="r">

        </item>
        <item
            android:id="@+id/blue"
            android:title="@string/font_blue"
            android:alphabeticShortcut="b">

        </item>
        <item
            android:id="@+id/yellow"
            android:title="@string/font_yellow"
            android:alphabeticShortcut="y">

        </item>
    </group>
</menu>

MainActivity.java

package cn.edu.hpu.acm.ui;

import android.content.Context;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
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 MainActivity extends AppCompatActivity {
    private TextView textView;
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.text);
        registerForContextMenu(textView);
        context = MainActivity.this;
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu,View v,                                    ContextMenu.ContextMenuInfo menuInfo) {

        MenuInflater menuInflater = new MenuInflater(context);
        menuInflater.inflate(R.menu.context,menu);
        menu.setHeaderTitle("请选择背景颜色");
        menu.setHeaderIcon(R.drawable.ic_launcher);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {

        item.setChecked(true);
        switch (item.getItemId()){
            case R.id.red:
                item.setChecked(true);
                textView.setBackgroundColor(Color.RED);
                break;
            case R.id.blue:
                item.setChecked(true);
                textView.setBackgroundColor(Color.BLUE);
                break;
            case R.id.yellow:
                item.setChecked(true);
                textView.setBackgroundColor(Color.YELLOW);
                break;
            default:
                break;
        }
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.isCheckable()){
            item.setChecked(true);
        }
        switch (item.getItemId()){
            case R.id.font_10:
                textView.setTextSize(10 * 2);
                break;
            case R.id.font_12:
                textView.setTextSize(12 * 2);
                break;
            case R.id.font_14:
                textView.setTextSize(14 * 2);
                break;
            case R.id.font_16:
                textView.setTextSize(16 * 2);
                break;
            case R.id.font_18:
                textView.setTextSize(18 * 2);
                break;
            case R.id.font_red:
                textView.setTextColor(Color.RED);
                break;
            case R.id.font_blue:
                textView.setTextColor(Color.BLUE);
                break;
            case R.id.font_yellow:
                textView.setTextColor(Color.YELLOW);
                break;
            case R.id.plain_item:
                Toast.makeText(context,"你点击了普通菜单项",Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
        return true;
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇