您的位置:首页 > 移动开发 > Android开发

android开发步步为营之29:选项菜单OptionsMenu的用法

2014-09-23 22:02 429 查看
菜单也是一个非常常用的主键,点击手机上的菜单按钮就呼出了。在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是OptionsMenu 

public interface Menu

android.view.Menu

Known Indirect Subclasses

ContextMenu, SubMenu

ContextMenu Extension of Menu for context menus providing functionality to modify the header of the context menu.

SubMenu Subclass of Menu for sub menus.

Class Overview

Interface for managing the items in a menu.

By default, every Activity supports an options menu of actions or options. You can add items to this menu and handle clicks on your additions. The easiest way of adding menu items is inflating an XML file into the Menu via MenuInflater. The easiest way of attaching
code to clicks is via onOptionsItemSelected(MenuItem) and onContextItemSelected(MenuItem).

Different menu types support different features:

Context menus: Do not support item shortcuts and item icons.

Options menus: The icon menus do not support item check marks and only show the item's condensed title. The expanded menus (only available if six or more menu items are visible, reached via the 'More' item in the icon menu) do not show item icons, and item
check marks are discouraged.

Sub menus: Do not support item icons, or nested sub menus.

开始我们的练习:创建一个OptionsMenu菜单

第一步、设计界面menuview.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

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_height="wrap_content" android:text="点击menu键选择菜单" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"
android:layout_marginTop="44dp"></TextView>

</RelativeLayout>

第二步、设计Activity OptionsMenuActivity.java

/**

*

*/

package com.figo.helloworld;

import android.app.Activity;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Toast;

/**

* @author zhuzhifei

*

*/

public class OptionsMenuActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.menuview);

}

/* *

* add()方法的四个参数,依次是: * 1、组别,如果不分组的话就写Menu.NONE, * 2、Id,这个很重要,

* Android根据这个Id来确定不同的菜单 * 3、顺序,那个菜单现在在前面由这个参数的大小决定 4、文本,菜单的显示文本

*/

@Override

public boolean onCreateOptionsMenu(Menu menu) {

Toast.makeText(this, "onCreateOptionsMenu", Toast.LENGTH_LONG).show();

menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon(

android.R.drawable.ic_menu_delete);

// setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以

// android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的

menu.add(Menu.NONE, Menu.FIRST + 2, 2, "编辑").setIcon(

android.R.drawable.ic_menu_edit);

menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(

android.R.drawable.ic_menu_help);

menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(

android.R.drawable.ic_menu_add);

menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(

android.R.drawable.ic_menu_info_details);

menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon(

android.R.drawable.ic_menu_send);

menu.add(Menu.NONE, Menu.FIRST + 7, 7, "电话").setIcon(//多余6项将显示more,点击more后将显示更多的菜单

android.R.drawable.ic_menu_call);

menu.add(Menu.NONE, Menu.FIRST + 8, 8, "照相").setIcon(

android.R.drawable.ic_menu_camera);

return true;

}

//点击Menu按钮时,先执行准备工作

@Override

public boolean onPrepareOptionsMenu(Menu menu) {

// TODO Auto-generated method stub

// return super.onPrepareOptionsMenu(menu);

Toast.makeText(this, "onPrepareOptionsMenu", Toast.LENGTH_LONG).show();

return true;

}

//再执行打开动作

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

// return super.onOptionsItemSelected(item);

//点击后一般执行startActivity(intent);启动某个Activity,这里只演示

switch (item.getItemId()) {

case Menu.FIRST + 1:

Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show();

break;

case Menu.FIRST + 2:

Toast.makeText(this, "编辑菜单被点击了", Toast.LENGTH_LONG).show();

break;

case Menu.FIRST + 3:

Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show();

break;

case Menu.FIRST + 4:

Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show();

break;

case Menu.FIRST + 5:

Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show();

break;

case Menu.FIRST + 6:

Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show();

break;

case Menu.FIRST + 7:

Toast.makeText(this, "电话菜单被点击了", Toast.LENGTH_LONG).show();

break;

case Menu.FIRST + 8:

Toast.makeText(this, "照相菜单被点击了", Toast.LENGTH_LONG).show();

break;

}

return false;

}

@Override

public void openOptionsMenu() {

// TODO Auto-generated method stub

super.openOptionsMenu();

Toast.makeText(this, "openOptionsMenu", Toast.LENGTH_LONG).show();

}

//然后执行关闭菜单选项工作

@Override

public void onOptionsMenuClosed(Menu menu) {

// TODO Auto-generated method stub

super.onOptionsMenuClosed(menu);

Toast.makeText(this, "onOptionsMenuClosed", Toast.LENGTH_LONG).show();

}

@Override

public boolean onCreatePanelMenu(int featureId, Menu menu) {

// TODO Auto-generated method stub

Toast.makeText(this, "onCreatePanelMenu", Toast.LENGTH_LONG).show();

return super.onCreatePanelMenu(featureId, menu);

}

@Override

public boolean onMenuItemSelected(int featureId, MenuItem item) {

// TODO Auto-generated method stub

Toast.makeText(this, "onMenuItemSelected", Toast.LENGTH_LONG).show();

return super.onMenuItemSelected(featureId, item);

}

@Override

public boolean onMenuOpened(int featureId, Menu menu) {

// TODO Auto-generated method stub

Toast.makeText(this, "onMenuOpened", Toast.LENGTH_LONG).show();

return super.onMenuOpened(featureId, menu);

}

}

第三步、AndroidManifest.xml注册Activity

<activity android:name=".OptionsMenuActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

第四步、运行效果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: