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;
	    }
	}



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