Android学习:用户界面UI之菜单(Menu)

        Android系统中的所有UI类都是建立在View和ViewGroup这两个类的基础之上。View的子类被称为“Widget”,ViewGroup的子类被称为“Layout”。任何视图组件的创建方式都有两种,一种通过在布局文件中声明创建,一种通过在代码中创建。


        菜单

        Android中的菜单分为三种类型:选项菜单(Option Menu)、上下文菜单(Context Menu)、子菜单(Sub Menu)。在代码中通过MenuInflater类使用。

        菜单资源文件也是一个XML文件,该菜单文件位于工程的res\menu\目录下。通过R.menu.menu's name方式引用。典型的菜单资源文件的结构是这样的:<menu>根元素,在<menu>根元素里面会套嵌<item>和<group>子元素,<item>元素中也可以套嵌<menu>形成子元素。


        选项菜单(Option Menu)

        当用户单击设备上的菜单按钮时,弹出的就是选项菜单。选项菜单最多只有6个,超过6个自动显示“更多”选项来显示。

        创建一个选项菜单需要如下步骤:

        1、覆盖Activity的onCreateOptionsMenu(Menu menu)方法,当我们第一次打开菜单时该方法被自动调用。

        2、调用Menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法来为菜单项设置图标。

        3、当菜单项(MenuItem)被选择时,覆盖Activity的onOptionsItemSelected()方法来响应事件。

package com.jwt.chp04;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;

public class OptionsMenuActivity extends Activity {

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// int groupID,int itemID,int order,string title
		menu.add(0, Menu.FIRST, 0, "Start");
		menu.add(0, Menu.FIRST + 1, 0, "Pull");
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case Menu.FIRST:
			setTitle("You select Start button");
			break;
		case Menu.FIRST + 1:
			setTitle("You select Pull button");
			break;
		}
		return true;
	}
}

        上下文菜单(Context Menu)

        当用户上时间按键不放,弹出的菜单称为上下文菜单。如在windows中用鼠标右键点击弹出的菜单也就是上下文菜单。

        在程序中创建一个上下文菜单需要如下步骤:

        1、覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项(MenuItem)。

        2、覆盖onContextItemSelected(),响应菜单单击事件。

        3、调用registerForContextMenu()方法,为视图注册上下文菜单。

package com.jwt.chp04;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class ContextMenuActivity extends Activity {

	private TextView lbl;

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

		lbl = (TextView) findViewById(R.id.lbl_CMA);
		registerForContextMenu(lbl);
	}

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

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// int groupID,int itemID,int order,string title
		menu.add(0, Menu.FIRST, 0, "Set Green Background");
		menu.add(0, Menu.FIRST + 1, 0, "Set Red Background");
		menu.add(0, Menu.FIRST + 2, 0, "Set Blue Background");
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case Menu.FIRST:
			lbl.setBackgroundColor(Color.GREEN);
			break;
		case Menu.FIRST + 1:
			lbl.setBackgroundColor(Color.RED);
			break;
		case Menu.FIRST + 2:
			lbl.setBackgroundColor(Color.BLUE);
			break;
		}
		return true;
	}

}


        子菜单(Sub Menu)

        子菜单就是将相同功能的分组进行多级显示的一种菜单。如windows的“文件”菜单中又有“新建”、“打开”、“关闭”等子菜单。

        在程序中创建子菜单需要如下步骤:

        1、覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法添加子菜单项(Sub Menu)。

        2、调用SubMenu的add()方法,添加子菜单(Sub Menu)。

        3、覆盖onOptionsItemSelected()方法,响应菜单单击事件。

package com.jwt.chp04;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;

public class SubMenuActivity extends Activity {

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		SubMenu smFile = menu.addSubMenu("File");
		smFile.add(1, Menu.FIRST + 1, 0, "Java Project");
		smFile.add(1, Menu.FIRST + 2, 0, "Android Project");
		menu.add(0, Menu.FIRST, 0, "Help");
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case Menu.FIRST:
			setTitle("You select Help Button");
			break;
		case Menu.FIRST + 1:
			setTitle("You select Button to Create Java Project");
			break;
		case Menu.FIRST + 2:
			setTitle("You select Button to Create Android Project");
			break;
		}
		return true;
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值