要实现菜单功能,首先需要通过方法onCreateOptionsMenu来创建菜单,然后需要对其能够触发的事件进行监听,这样才能够在事件监听onMenuItemSelected中根据不同的菜单项来执行不同的任务。对于这个功能,我们可以有两种方法来实现:
1.通过xml布局来实现,粗略的代码如下:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=getMenuInflater();//MenuInflater这个类用来解析我们的资源文件menu下的menu.xml配置文件,并装载它
inflater.inflate(R.menu.menu, menu);
return true;
}
当然,对于这种方法的实现,我们首先要在res下面新建menu文件夹,然后再在其下面建menu.xml文件
2.通过Menu.add方法来实现,粗略的代码如下:
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0,R.string.ok);
menu.add(0, 0, 1,R.string.back);
return true;
}
具体方法里面的参数是什么意思,我们可以参考android的SDK文档
3.下面我把我做的一个例子的源码写出来:
1)在res下新建menu文件夹,然后在menu下新建menu.xml文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/about"
android:title="关于"/>
<item android:id="@+id/exit"
android:title="退出"/>
</menu>
2)在layout下添加一个main2.xml配置文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello2"
/>
</LinearLayout>
3)同时修改string.xml配置文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MainActivity001!</string>
<string name="hello2">Hello World, MainActivity002!</string>
<string name="app_name">菜单的比较全面的练习</string>
<string name="ok">确定</string>
<string name="back">返回</string>
</resources>
4)新建两个activity,代码如下:
MainActivity001类:
package com.test.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
public class MainActivity001 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
//创建Menu,方法一,直接用MenuInflater这个类来解析menu的xml配置文件
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int item_id=item.getItemId();
switch(item_id){
case R.id.about:
Intent intent=new Intent();
intent.setClass(MainActivity001.this,MainActivity002.class);
startActivity(intent);
MainActivity001.this.finish();
break;
case R.id.exit:
MainActivity001.this.finish();
break;
}
return true;
}
}
MainActivity002类:
package com.test.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity002 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
}
//创建菜单的方法二,直接用menu的add()方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0,R.string.ok);
menu.add(0, 0, 1,R.string.back);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
int item_id=item.getItemId();
switch(item_id){
case 0:
case 1:
Intent intent=new Intent();
intent.setClass(MainActivity002.this,MainActivity001.class);
startActivity(intent);
MainActivity002.this.finish();
break;
}
return true;
}
}
4)如果你此时运行的话,会提示错误,那是因为有两个Activity,所以我们还要在AndroidManifest.xml配置文件中添加如下的代码:
<activity android:name="MainActivity002" ></activity>
把它添加在第一个Acitivity配置文件的后面,运行程序,就会出现我们所想要的,以上,只是一种简单的实现效果,我们可以更深一步的往里面添加内容。