6 使用OptionsMenu实现选项菜单

6-1 创建菜单 (05:52)

点击菜单按钮弹出菜单,菜单里面有菜单项,给菜单项添加点击按钮

  

 

OptionsMenu
  创建选项菜单:onCreateOptionsMenu()
    ---设置菜单项可用代码动态设置menuAdd();
    ---还可以通过xml设置MenuInflate.inflate();

  设置菜单项点击事件:onOptionsItemSelected()

 

xml显示菜单:

  1.创建menu的xml文件 

  2.在onCreateOptionsMenu方法里通过getMenuInflater().inflater(R.menu.main,menu);

    加载res->menu->main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
android:id="@+id/action_menu_item1"
android:orderInCategory="100"
android:showAsAction="never"
android:title="菜单一"/>
<item
android:id="@+id/action_menu_item2"
android:orderInCategory="100"
android:showAsAction="never"
android:title="菜单二"/>
</menu>

 

6-2 监听菜单列表点击事件 (03:33)

静态:

Main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_menu_item1"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="菜单一"/>
<item
        android:id="@+id/action_menu_item2"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="菜单二"/>
</menu>

MainActivity.java

package com.imooc.optionmenudemo;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

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

    @Override
    // 实现对菜单选型中的每一条记录的点击事件也是这个Activity中的事件的处理:
    // 对当前activity的菜单项中的选项的点击事件的监听
    public boolean onOptionsItemSelected(MenuItem item) {
        // 重写选项菜单点击方法
        switch (item.getItemId()) {
        case R.id.action_menu_item1:
            Toast.makeText(this, "点击了" + item, Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_menu_item2:
            Toast.makeText(this, "点击了" + item, Toast.LENGTH_SHORT).show();
            break;
        }
        return super.onOptionsItemSelected(item);
    }
}

   

 

6-3 动态添加菜单项 (11:13)

动态(且点击菜单项跳转;另一个界面):

SecondActivity.java

package com.imooc.optionmenudemo;

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout);
    }
}

activity_layout.xml

<?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>

MainActivity.java

package com.imooc.optionmenudemo;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        // getMenuInflater().inflate(R.menu.main, menu);
        MenuItem item = menu.add(1, 100, 1, "菜单一");
        item.setTitle("aaa");
        item.setIcon(R.drawable.ic_launcher);// api>=11 不显示图标 ,
        menu.add(1, 101, 1, "菜单二");
        menu.add(1, 102, 1, "菜单三");
        menu.add(1, 103, 1, "菜单四");
        menu.add(1, 104, 1, "菜单五");
        menu.add(1, 105, 1, "菜单六");
        menu.add(1, 106, 1, "菜单七");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch (item.getItemId()) {
        case 100:
            Intent intent = new Intent(MainActivity.this, SecondActivity.class);
            item.setIntent(intent);
            break;

        case 101:
            Toast.makeText(MainActivity.this, "点击了菜单二", Toast.LENGTH_SHORT)
                    .show();
            break;
        case 102:
            Toast.makeText(MainActivity.this, "点击了菜单三", Toast.LENGTH_SHORT)
                    .show();
            break;
        case 103:
            Toast.makeText(MainActivity.this, "点击了菜单四", Toast.LENGTH_SHORT)
                    .show();
            break;
        case 104:
            Toast.makeText(MainActivity.this, "点击了菜单五", Toast.LENGTH_SHORT)
                    .show();
            break;
        case 105:
            Toast.makeText(MainActivity.this, "点击了菜单六", Toast.LENGTH_SHORT)
                    .show();
            break;
        case 106:
            Toast.makeText(MainActivity.this, "点击了菜单七", Toast.LENGTH_SHORT)
                    .show();
            break;
        }
        return super.onOptionsItemSelected(item);
    }
}

创建菜单项:
第一步:在Activity中重写onCreateOptionsMenu()来创建选项菜单,在中包含了getMenuInflater().inflate(R.menu.main,menu),R.menu.main是res的menu文件夹下的xml文件是放菜单的文件夹;设置菜单项可以通过两种方法: 一:代码动态设置menu.add(groupId,itemId,order,title),
groupId--1:分组的id;
itemId--100:菜单项的id;
order--1:菜单项排序用的;
title--"菜单1":菜单名称;
类似于ArrayList,可以调用add方法来加载如
menu.add(1,100,1,"菜单一");
menu.add(1,101,1,"菜单二");
menu.add(1,102,1,"菜单三");
add方法返回的是item,可以赋值给item,再调用item的setTitle与setIcon(在API>=11时,是不显示图标的)来设置item;


二:在R.menu.main的xml文件,添加item控件来添加设置菜单项;
第二步:重写onOptionsItemSelected(MenuItem item)方法设置菜单项的点击事件,再switch(item.getItemId())来设置各个case,方法1的id是add中itemId,方法二的id是xml文件中定义的id的点击事件;
第三步:创建Activity,关联xml文件,并在manifest中加上activity。在case中,新建intent,调用item的setIntent(intent)实现界面跳转;
新建activity时需要再mainfast中配置

posted @ 2016-04-12 12:16  沉默的羊癫疯  阅读(295)  评论(0编辑  收藏  举报