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内)
@Override
public 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>
@Override
public 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;
	    }
	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章