当前位置: 代码迷 >> Android >> Android学习记要-Menu综合
  详细解决方案

Android学习记要-Menu综合

热度:41   发布时间:2016-04-28 01:17:54.0
Android学习记录------Menu综合

在android中,有以下几种菜单:

1.Options Menu(选项菜单);

效果,在action bar处显示所定义的菜单项。


2.Context Menu(上下文菜单);

效果:长按后弹出菜单窗口在屏幕中央。


3.Popup Menu(弹出框菜单)。

效果:在所绑定的view 的上边或下边显示菜单窗口。

4.contextual Action Mode。(这个我打算另立一篇blog。也比较常用。常用于listView等adapterView里,进行多选,然后同时对多个选项进行操作。)

1.选项菜单

选项菜单所出现的位置是actionbar。现在主要用来干什么?一般都是用来定义搜索,设置,分享等功能。

如何定义选项菜单?

1.定义menu文件。

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:showAsAction="always"        android:title="item">        <menu>            <item android:title="menu1"/>            <item android:title="menu2"/>        </menu>    </item></menu>


2.加载menu菜单文件。activity文件:
@Override	public boolean onCreateOptionsMenu(Menu menu) {		getMenuInflater().inflate(R.menu.menu_4_23, menu);		return true; //当你inflate菜单后需要return true,不然不会显示}


3.点击事件处理。
	@Override	public boolean onContextItemSelected(MenuItem item) {		switch (item.getItemId()) {<span style="white-space:pre">	</span>		case R.id.menu1:			Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show();			return true;<span style="white-space:pre">	</span>//return true 告知系统这里处理了该事件		case R.id.menu2:			Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show();			return true;		default:			return super.onContextItemSelected(item);		}	}
点击item后效果图:



2.Context Menu 上下文菜单

其实它的使用也是类似与options menu,显示的地方和时间不同罢了。它是在用户长按某个view后弹出的在屏幕中央的菜单框。

定义Context Menu:

1.创建ContextMenu:(activity内)
@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,	ContextMenuInfo menuInfo) {	super.onCreateContextMenu(menu, v, menuInfo);		getMenuInflater().inflate(R.menu.context_menu_4_23, menu);//看着都一样,通过menuInflater去填充view视图。当然啦,首先还是要定义menu文件的。	}

<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre">	</span>2.定义点击ContextMenu中item的处理方法</span>
@Overridepublic boolean onContextItemSelected(MenuItem item) {	switch (item.getItemId()) {	case R.id.menu1:		Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show();		return true;	case R.id.menu2:		Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show();		return true;	default:		return super.onContextItemSelected(item);	}}

3.为所需要context Menu的View视图注册。
为什么要这么做?当然啦,不然系统怎么知道哪个view需要这个contextView哪个View不需要啊。你或许会想:为什么不默认activity所有View都附加cotext Menu?想想这样的坏处:我不希望一些view有这种想过可是它却默认拥有?例如我只想让listView中的item拥有而已,却连button长按都出现例如delete这样的选项?think about it。

	TextView mContextTv =(TextView) findViewById(R.id.contextMenuTv);	registerForContextMenu(mContextTv);
然后长按该view对象就会出现如下所示画面:


3.PopupMenu(弹出菜单)
它的效果与context menu是类似的,位置显示略有不同,它是出现在绑定的view的附近(上边或下边)。

1.定义menu文件。
2.构建与某个view对象绑定的popup menu对象,填充视图,设置监听器,并显示。
	public void showMenu(View v) {	    PopupMenu popup = new PopupMenu(this, v);	    // 设置监听器接口,本类实现了该接口。	    popup.setOnMenuItemClickListener(this);	    popup.inflate(R.menu.actions);	    popup.show();	}	@Override	public boolean onMenuItemClick(MenuItem item) {	    switch (item.getItemId()) {	        case R.id.archive:	            archive(item);	            return true;	        case R.id.delete:	            delete(item);	            return true;	        default:	            return false;	    }	}



  相关解决方案