菜单功能的两种实现方法

   要实现菜单功能,首先需要通过方法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配置文件的后面,运行程序,就会出现我们所想要的,以上,只是一种简单的实现效果,我们可以更深一步的往里面添加内容。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值