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

来源:互联网 发布:选择网络项目的标准 编辑:程序博客网 时间:2024/05/22 16:52

我们都知道在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;    }}

1 0
原创粉丝点击