Android UI之Memu菜单


1. options menu

按menu键显示。 因为options menu在屏幕底部最多只能显示6个菜单项,这些菜单项称为icon menu,icon menu只支持文字(title) 以及icon,可以设置快捷键,不支持checkbox以及radio控件,所以不能设置checkable选项。而多于6的菜单项会以“more” icon menu来调出,称为expanded menu。它不支持icon,其他的特性都和icon menu一样!

两种使用方式:

(1)通过xml配置, menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/about"
        android:title="About"/>
    <item
        android:id="@+id/exit"
        android:title="Exit"/>
</menu>
java代码:

	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.layout.menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int item_id = item.getItemId();
		switch (item_id) {
		case R.id.about:
			Toast.makeText(this, "about", Toast.LENGTH_SHORT).show();
			break;
		case R.id.exit:
			Toast.makeText(this, "exit", Toast.LENGTH_SHORT).show();
			break;
		}
		return true;
	}
(2) 通过代码:
	public boolean onCreateOptionsMenu(Menu menu) {
		Log.i("com.test", "------------onCreateOptionsMenu"); // 只执行一次
		menu.add(0, 1, 1, "菜单1"); // 第二个属性itemId,第三个属性order
		menu.add(0, 2, 2, "菜单2");
		return super.onCreateOptionsMenu(menu);
	}
	private boolean mIsChange = false;
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		Log.i("com.test", "------------onPrepareOptionsMenu"); // 每次都执行
		if (mIsChange) {
			mIsChange = false;
			menu.getItem(1).setTitle("注销");
		} else {
			mIsChange = true;
			menu.getItem(1).setTitle("登录");
		}
		return super.onPrepareOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) { // itemId
		case 1:
			Toast.makeText(this, "111", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "222", Toast.LENGTH_SHORT).show();
			break;
		}
		return true;
	}

2. context menu

在相应的view上按几秒后显示

  •  Activity::registerForContextMenu(View view) 为某个view注册context menu,一般在Activity::onCreate里面调用。
  •  Activity::onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)创建context menu,和options menu不同,context meun每次显示时都会调用这个函数。
  • Activity::onContextItemSelected(MenuItem item) 处理选中的菜单项。
java代码:

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
		menu.add(0, 1, 1, "中国");
		menu.add(0, 2, 2, "美国");
		menu.add(0, 3, 3, "日本");
		super.onCreateContextMenu(menu, v, menuInfo);
	}
	
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 1:
			Toast.makeText(this, "中国", Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(this, "美国", Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(this, "日本", Toast.LENGTH_SHORT).show();
			break;
		}
		return super.onContextItemSelected(item);
	}


3. sub menu

以上两种menu都可以加入子菜单,但是子菜单不能嵌套子菜单,最多两层。子菜单不支持icon

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值