標籤:menu optionsmenu contextmenu popupmenu
Android常用菜單:
1.OptionsMenu.
2.ContextMenu.
3.android4.0以後的PopupMenu和ActionMode.
OptionsMenu
1. 建立:
1.1 在需要設定OptionsMenu的Activity中重寫onCreateOptionsMenu(Menu
menu)方法,並且返回true(否則將不會顯示ContextMenu)。
1.2 在onCreateOptionsMenu(Menu menu)中,向參數中的menu對象加入我們
需要設定的菜單選項。這裡加入菜單選項有兩種方法:
1)通過menu對象的add方法加入功能表按鈕。
2)通過注入res/menu中的Menu定義檔案,加入功能表按鈕。
1.3 現在我們就有了ContextMenu了。
2.屬性:
android:title 名字;
android:id ID值;
android:orderInCategory menu排序;
android:showAsAction menu顯示方式:
ifRoom :會顯示在Item中,但是如果已經有4個或者4個以上的Item時會隱藏在溢出列表中。當然個數並不僅僅局限於4個,依據螢幕的寬窄而定
never :永遠不會顯示。只會在溢出列表中顯示,而且只顯示標題,所以在定義item的時候,最好把標題都帶上。
always :無論是否溢出,總會顯示。
withText :withText值示意Action bar要顯示文本標題。Action bar會儘可能的顯示這個標題,但是,如果表徵圖有效並且受到Action bar空間的限制,文本標題有可能顯示不全。
collapseActionView(4.1及以下的模擬器用不出效果):聲明了這個操作視窗應該被摺疊到一個按鈕中,當使用者選擇這個按鈕時,這個操作視窗展開。一般與ifRoom結合使用。
在onOptionsItemSelected(MenuItem item)中監聽到OptionsMenu點擊事件,能得到所點擊的功能表按鈕的對象MenuItem。
3.添加子功能表
方法1:我們可以在Menu的item中添加新的Menu標籤,用來添加子功能表。
方法2:在onCreateOptionsMenu(Menu menu)中通過addSubMenu向菜單加入子功能表。
public class OptionsMenuActivity extends Activity {@Overridepublic boolean onCreateOptionsMenu(Menu menu) {/*//1.通過JAVA代碼添加菜單//為menu添加選項menu.add("Search") ;//groupId 選項的組號;itemId 選項的id; order 排列的序號;menu.add(0, 5, 0, "Setting") ;//為menu添加子功能表SubMenu more = menu.addSubMenu("More") ;more.add("more1") ;more.add("more2") ;*///2.通過XML資源檔添加菜單getMenuInflater().inflate(R.menu.menu, menu) ;System.out.println("onCreateOptionsMenu");//返回true代表顯示OptionsMenu,返回falseOptionsMenu將無法顯示。return true ;}@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {System.out.println("onPrepareOptionsMenu");//刪除Search選項menu.removeItem(R.id.menu_search) ;return super.onPrepareOptionsMenu(menu);}/** * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem) */@Overridepublic boolean onOptionsItemSelected(MenuItem item) {//響應點擊事件String title = (String) item.getTitle() ;if("Search".equals(title)){}else if("Setting".equals(title)){}else if("More".equals(title)){}System.out.println("MenuItem = "+title);//這裡返回true或false,我們都能響應到。//用於表示我們處理掉這個事件(true),false代表我們不處理。return false ;}}
TIPS:
他們的點擊監聽都在onOptionsItemSelected中;
onCreateOptionsMenu只會調用一次,只有在建立的時候會調用。需要調用 onPrepareOptionsMenu()方法,在這裡修改OptionMenu的狀態與按鈕;
在4.0以上,我們必須先調用invalidateOptionsMenu(),才能調用onPrepareOptionsMenu()。
Float Contextual Menu
這是一個浮動菜單,需要長按觸發。
1.建立:
1.1 建立Menu我們一樣需要在Activity中實現一個方法:
onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo),並在其中建立菜單。
1.2 觸發方法
registerForContextMenu(View view)將這個菜單綁定到一個View上去。
onContextItemSelected(MenuItem item)。
PopupMenu
提供了一個類似於Window下滑鼠右鍵菜單的操作方式
1. 建立對象:
PopupMenu pMenu = new PopupMenu(this, view);
2. 注入介面:
pMenu.getMenuInflater().inflate(R.menu.menu, pMenu.getMenu());
3. 添加監聽
pMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
});
4. 顯示:pMenu.show();
5. 手動取消: pMenu.dismiss() ;
Android基礎知識(二)—-Menu