随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
Android中的菜单分为选项菜单、上下文菜单和子菜单,都可以在XML文件中声明定义,在代码中通过MenuInflater类使用。
典型菜单资源文件结构是这样的:<menu>根元素,在根元素里面嵌套<item>和<group>子元素,<item>元素中也可嵌套<menu>形成子菜单。<group>表示一个菜单组,相同的菜单组可以一起设置属性。
下面通过一个实例来演示,本实例中定义了一个文件系统的菜单信息,主菜单包括File、Edit、Help三个菜单项。File菜单有New、Open、Save子菜单项;
Edit菜单有Cut、Copy、Past子菜单,Help菜单有About和Exit子菜单项。Help子菜单可以响应单击事件。
Activity:
package com.lovo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class TestMenuActivity extends Activity {
/** 创建一个MenuInflater对象 */
private MenuInflater mi = new MenuInflater(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 调用MenuInflater的inflate方法,通过配置文件创建菜单
mi.inflate(R.menu.file_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// 显示关于对话框
case R.id.about:
aboutAlert("本实例演示的是如何使用菜单资源定义菜单!");
break;
case R.id.exit:
exitAlert("真的要退出吗?");
break;
}
return true;
}
private void exitAlert(String msg) {
// 实例化AlertDialog.Builder对象
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置显示信息
builder.setMessage(msg).setCancelable(false)
// 确定按钮
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 结束Activity
finish();
}
})
// 取消按钮
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
});
// 创建对话框
AlertDialog alert = builder.create();
// 显示对话框
alert.show();
}
private void aboutAlert(String message) {
// 实例化AlertDialog.Builder对象
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(message).setCancelable(false)
// 确定按钮
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
// 创建对话框
AlertDialog alert = builder.create();
// 显示对话框
alert.show();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试菜单资源" />
</LinearLayout>
menuXML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:title="File">
<menu>
<group
android:id="@+id/noncheckable_group"
android:checkableBehavior="none" >
<item
android:id="@+id/newFile"
android:alphabeticShortcut="n"
android:title="New"/>
<item
android:id="@+id/openFile"
android:alphabeticShortcut="o"
android:title="Open"/>
<item
android:id="@+id/saveFile"
android:alphabeticShortcut="s"
android:title="Save"/>
</group>
</menu>
</item>
<item android:title="Edit">
<menu>
<!-- checkableBehavior="single"选择行为为单选 -->
<group
android:id="@+id/edit_group"
android:checkableBehavior="single" >
<item
android:id="@+id/cut"
android:title="Cut"/>
<item
android:id="@+id/copy"
android:title="Copy"/>
<item
android:id="@+id/past"
android:title="Past"/>
</group>
</menu>
</item>
<item android:title="Help">
<menu>
<group android:id="@+id/help_group" >
<item
android:id="@+id/about"
android:title="About"/>
<item
android:id="@+id/exit"
android:title="Exit"/>
</group>
</menu>
</item>
</menu>