Android学习 22->菜单menu

        菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下几种:选项菜单(OptionsMenu)、上下文菜单(ContextMenu),子菜单(SubMenu),弹出菜单(PopupMenu)。

       1.选项菜单和动作条(Options menu and action bar):
           一个Activity中主要的菜单项的集合。在2.3或更低的版本中,用户可以按菜单键来调出选项菜单;在3.0或更高的版本上,可能没有菜单键,所以菜单项是通过动作条来呈现的
       选项菜单包含两组菜单项:
      图标菜单Icon Menu这个是当用户按下菜单键时最初出现屏幕下方的item集合。它支持最多6个菜单项。只有这些菜单支持图标而且这些菜单并不支持checkboxes或者radio buttons。
      扩展菜单Expanded Menu这是通过按“更多”菜单显现出来的一个竖向的项目列表。它仅当图标菜单过多时存在而且是由6个以及其它选项菜单组成。

      创建方法:
          1)、覆盖Activity的onCreateOptionsMenu(Menu menu)方法,当我们第一次打开菜单时调用。
          2)、调用Menu的add()方法添加菜单项(MenuItem),可以调用MenuItem的setIcon()方法为菜单项设置图标。
          3)、当菜单项(MenuItem)被选中时,覆盖Acitivy的onOptionsMenuSelected()方法响应事件。


       2.上下文菜单Context Menu和上下文动作条 contextual action mode;
        当用户在某个元素上长按时的菜单。在3.0或更高本版上,应使用上下文动动作条。
        上下文菜单Context Menu这是一个浮动菜单列表,通常在你长时间按在一个视图上时出现(比如一个列表项)
        当用户长按Activity页面时,弹出的菜单我们称为上下文菜单。我们经常在Windows中用鼠标右键单击弹出的菜单就是上下文菜单。
          1)、覆盖Activity的onCreateContextMenu()方法,调用Menu的add方法添加菜单项MenuItem
          2)、覆盖onContextItemSelected()方法,响应菜单单击事件
          3)、调用registerForContextMenu()方法,为视图注册上下文菜单

 

      3、子菜单就是讲相同功能的分组进行多级显示的一种菜单,比如,Windows的“文件”菜单中就有“新建”,“打开”,“关闭”等子菜单。创建步骤如下:

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

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

          3)、覆盖onContextItemSelected()方法,添加子菜单单击事件。
      4、弹出菜单(Popup menu):        弹出菜单会在调用它的View上显示一个垂直排列的列表。很适合作为动作条的溢出动作。

         下面是代码布局及图片,在写布局前先在结构目录res文件夹下建一个menu子文件夹

 

      上图中各按钮的实现效果没有截图,在下面的代码和布局中将有应用:

放在menu里面的xml布局如下:

main_options_menu.xml

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
	<item android:id="@+id/action_menu"
	    android:title="设置"/>
	
	<item android:id="@+id/exit_menu"
	    android:title="退出"/>
    
</menu>
</span>


main_popup_menu.xml

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/popup1_titlie"
        android:title="选项">
        <menu android:icon="@drawable/wallet_select_indicator" >
            <item android:title="新建"/>
            <item android:title="退出"/>
        </menu>
    </item>
    <item
        android:id="@+id/popup2_titlie"
        android:title="退出"/>

</menu></span>


java代码MenuActivity.java

<span style="font-size:18px;">package com.sc.android.ui.menu;

import java.util.ArrayList;

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.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.Toast;

import com.sc.android.R;

public class MenuActivity extends Activity {
	private ListView mListView;
	private Button mCotextBtn, mPopupBtn;
	private ArrayAdapter<String> mAdapter;
	private PopupMenu mPopupMenu;
	private static final int ACTION_MENU = 0;
	private static final int EXIT_MENU = 1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_popup_listview_layout);
		
		mListView = (ListView) findViewById(R.id.popup_listsview);
		mCotextBtn = (Button) findViewById(R.id.context_menu_btn);
		mPopupBtn = (Button) findViewById(R.id.popup_menu_btn);

		mAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, getData());
		mListView.setAdapter(mAdapter);

		registerForContextMenu(mCotextBtn);
		
		mListView.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				ArrayAdapter adpater = (ArrayAdapter) parent.getAdapter();
				Toast.makeText(MenuActivity.this,
						"长按事件 :  " + adpater.getItem(position),
						Toast.LENGTH_SHORT).show();
				return false;
			}

		});
		
		mPopupMenu = new PopupMenu(this, mPopupBtn);
		
		mPopupMenu.inflate(R.menu.main_popup_menu);
		
		mPopupBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				mPopupMenu.show();
			}
		});
	}

	public ArrayList<String> getData() {
		ArrayList<String> list = new ArrayList<String>();
		list.add("选项莱单");
		list.add("上下文莱单");
		list.add("弹出莱单");
		return list;
	}

	// >>>>>>>>>>>>>>>选项菜单>>>>>>>>>>>>>>>>>>>>>>
	// 用xml布局实现
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main_options_menu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.action_menu:
			Toast.makeText(this, "设置成功", Toast.LENGTH_SHORT).show();
			break;

		case R.id.exit_menu:
			Toast.makeText(this, "退出", Toast.LENGTH_SHORT).show();
			break;
		}

		return super.onOptionsItemSelected(item);
	}

	// >>>>>>>>>>>>>>>上下文菜单>>>>>>>>>>>>>>>>>>>>
	// 用代码布局实现
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		menu.add(0, ACTION_MENU, 0, "设置");
		menu.add(0, EXIT_MENU, 1, "退出");
		super.onCreateContextMenu(menu, v, menuInfo);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case ACTION_MENU:
			Toast.makeText(this, "设置成功", Toast.LENGTH_SHORT).show();
			break;

		case EXIT_MENU:
			Toast.makeText(this, "退出", Toast.LENGTH_SHORT).show();
			break;
		}
		return super.onContextItemSelected(item);
	}
}
</span>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值