標籤:
在活動中使用Menu
不知道你還記不記得,在上一章中建立你的第一個Android項目時,ADT在HelloWorldActivity中自動建立了一個onCreateOptionsMenu()方法。這個方法是用於在活動中建立菜單的,由於當時我們的重點不在這裡,所以直接先忽略了,現在可以來仔細分析一下了。
手機畢竟和電腦不同,它的螢幕空間非常有限,因此充分地利用螢幕空間在手機介面設計中就顯得非常重要了。如果你的活動中有大量的菜單需要顯示,這個時候介面設計就會比較尷尬,因為僅這些菜單就可能佔用螢幕將近三分之一的空間,這該怎麼辦呢?不用擔心,Android給我們提供了一種方式,可以讓菜單都能得到展示的同時,還能不佔用任何螢幕的空間。
首先在res目錄下建立一個menu檔案夾,右擊res目錄→New→Folder,輸入檔案夾名menu,點擊Finish。接著在這個檔案夾下再建立一個名叫main的菜單檔案,右擊menu檔案夾→New→Android XML File,2.9所示。
圖 2.9
檔案名稱輸入main,點擊Finish完成建立。然後在main.xml中添加如下代碼:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/add_item"
android:title="Add"/>
<item
android:id="@+id/remove_item"
android:title="Remove"/>
</menu>
這裡我們建立了兩個功能表項目,其中<item>標籤就是用來建立具體的某一個功能表項目,然後通過android:id給這個功能表項目指定一個唯一識別碼,通過android:title給這個功能表項目指定一個名稱。
然後開啟FirstActivity,重寫onCreateOptionsMenu()方法,代碼如下所示:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
通過getMenuInflater()方法能夠得到MenuInflater對象,再調用它的inflate()方法就可以給當前活動建立菜單了。inflate()方法接收兩個參數,第一個參數用於指定我們通過哪一個資源檔來建立菜單,這裡當然傳入R.menu.main,第二個參數用於指定我們的功能表項目將添加到哪一個Menu對象當中,這裡直接使用onCreateOptionsMenu()方法中傳入的menu參數。然後給這個方法返回true,表示允許建立的菜單顯示出來,如果返回了false,建立的菜單將無法顯示。
當然,僅僅讓菜單顯示出來是不夠的,我們定義菜單不僅是為了看的,關鍵是要菜單真正可用才行,因此還要再定義菜單響應事件。在FirstActivity中重寫onOptionsItemSelected()方法:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_item:
Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
在onOptionsItemSelected()方法中,通過調用item.getItemId()來判斷我們點擊的是哪一個功能表項目,然後給每個功能表項目加入自己的邏輯處理,這裡我們就活學活用,彈出一個剛剛學會的Toast。
重新運行程式,並按下Menu鍵,效果2.10所示。
圖 2.10
可以看到,菜單預設是不會顯示出來的,只有按下了Menu鍵,菜單才會在底部顯示出來,這樣我們就可以放心地使用菜單了,因為它不會佔用任何活動的空間。然後點擊一下Add功能表項目,效果2.11所示。
安卓--菜單