第二章 吸引你的眼球—UI編程(8),第二章ui
2.4 Menu鍵的呼喚—Menu菜單
使用Android手機的朋友應該對手機的“Menu”鍵都不陌生吧。它使用起來方便、快捷,不需要佔用應用的介面,正因為它的這些特性,我們現在有很多的應用都使用了Menu-菜單鍵。
Menu菜單有好幾種類型,它們各有各的展現形式,分別使用在不同的場合,以下我們逐一對它們進行介紹。
1)普通的Menu(選項菜單)
這是我們平時使用最多、也是最常見的菜單,它就是當使用者單擊裝置上的菜單按鍵時彈出的菜單。它最多隻能顯示6個,超過6個則第六個自動顯示“更多”選項來展開顯示。它的建立也很簡單,在Activity中覆蓋onCreateOptionsMenu(Menu menu)方法。
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 1, "添加"); menu.add(0, 2, 2, "刪除"); return super.onCreateOptionsMenu(menu); } |
在Menu的add方法中有四個參數:
第一個int類型的group ID參數,代表的是組概念,你可以將幾個功能表項目歸為一組,以便更好的以組的方式管理你的功能表按鈕。
第二個int類型的item ID參數,代表的是項目編號。這個參數非常重要,一個item ID對應一個menu中的選項。在後面使用菜單的時候,就靠這個item ID來判斷你使用的是哪個選項。
第三個int類型的order ID參數,代表的是功能表項目的顯示順序。預設是0,表示菜單的顯示順序就是按照add的顯示順序來顯示。
第四個String類型的title參數,表示選項中顯示的文字。
按下Menu鍵後效果2-24所示:
圖2-24 普通Menu的使用
當然,我們也可以給每一個功能表項目設定單獨的表徵圖:
menu.add(0, 1, 1, "添加").setIcon(R.drawable.add_no); menu.add(0, 2, 2, "刪除").setIcon(R.drawable.reduce_no); |
效果2-25所示:
圖2-25 Menu添加表徵圖
這樣就有了“添加”和“刪除”兩個菜單選項。如果要添加點擊事件,則要覆蓋onOptionsItemSelected(MenuItem item)方法。
@Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId() == 1){ Toast t = Toast.makeText(this, "你選的是添加菜單", Toast.LENGTH_SHORT); t.show(); } else if(item.getItemId() == 2){ Toast t = Toast.makeText(this, "你選的是刪除菜單", Toast.LENGTH_SHORT); t.show(); } return true; } |
2)SubMenu(子功能表)
如果剛才介紹的Menu為第一級按鈕的話,SubMenu就是第二級按鈕,它是將相同功能的分組進行多級顯示的菜單。
SubMenu的使用也同樣簡單,在第一段代碼onCreateOptionsMenu(Menu menu)方法中加入幾句,成下面這樣:
@Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, 1, 1, "添加"); menu.add(0, 2, 2, "刪除"); SubMenu subMenu = menu.addSubMenu(0, 3, 3, "修改"); subMenu.add(1, 4, 1, "使用者名稱修改"); subMenu.add(1, 5, 2, "密碼修改"); return true; } |
點擊“修改”後就會出現子功能表,有兩個子選項,分別是“使用者名稱修改”和“密碼修改”,效果2-26所示:
圖2-26 子功能表的使用
3)Context Menu(操作功能表)
Context Menu類似於電腦上的右鍵,長按某個View之後彈出來的菜單。我們也來舉個簡單的例子加以說明。
首先在布局檔案中定義一個按鈕:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/test" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我的按鈕"/> </RelativeLayout> |
然後我們在該Activity的onCreate方法裡對這兩個按鈕進行註冊,代碼如下:
private Button myButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton = (Button) findViewById(R.id. my_button1); registerForContextMenu(myButton); } |
註冊好了之後,我們就可以覆蓋onCreateContextMenu方法,在這方法中實現b1和b2兩個按鈕的長按事件,代碼如下:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { if(v== myButton){ Toast.makeText(DialogActivity.this, "長按事件", Toast.LENGTH_SHORT).show(); } super.onCreateContextMenu(menu, v, menuInfo); } |
我們長按按鈕來看看效果,2-27所示:
圖2-27 操作功能表的使用
我們使用的主要就是以上三種菜單,它們各有各的特點,應用在不同的場合。
其實很多時候,我們比不是通過“寫入程式碼”來建立菜單的,而是採用xml檔案的方式。這種方式可以使代碼和檔案分離開來,使代碼整個看上去更加的清晰。建立起來也相當的方便、快捷。下面我們也舉一個簡單的例子加以說明。
首先要在res/目錄下建一個檔案夾,名為menu,接著在該檔案夾下建一個名為menu_xml_file.xml的xml檔案,代碼如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/grout_main"> <item android:id="@+id/menu_1" android:title="Menu1"/> <item android:id="@+id/menu_2" android:title=" Menu2" /> </group> </menu> |
在Activity中覆蓋onCreateOptionsMenu(Menu menu)方法,代碼如下:
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_xml_file, menu); return true; } |
這樣Menu菜單就建立好了,效果2-28所示:
圖2-28 xml檔案建立菜單
和之前一樣,我們也可以通過ID監聽它們的點擊事件。