理解Android的菜單
菜單是許多應用程序不可或缺的一部分,Android中更是如此,所有搭載Android系統的手機甚至都要有一個"Menu"鍵,由此可見菜單在Android程序中的特殊性。
android提供了三種菜單類型,分別爲options menu,context menu,sub menu。
options menu就是通過按home鍵來顯示。
context menu需要在view上按上2s後顯示。context menu是跟某個具體的view綁定在一起,在activity種用registerForContextMenu來爲某個view註冊context menu。context menu在顯示前都會調用onCreateContextMenu來生成menu。onContextItemSelected選中的菜單項。
options menu最多隻能在屏幕最下面顯示6個菜單選項,成爲icon menu,icon menu不能有checkable選項。多餘6的會以more icon menu來調出,成爲expanded menu。options menu通過activity的onCreateOptionsMenu來生成,這個函數只會在menu第一次生成時調用。任何想改變options menu的想法只能在onPrepareOptionsMenu來實現,這個函數會在menu顯示前調用。onOptionsItemSelected 處理選中的菜單項。
options menu和context menu menu都有可以加入子菜單,子菜單不能種不能嵌套子菜單。
android還提供了對菜單項進行分組的功能,可以把相似功能的菜單項分成同一個組,這樣就可以通過調用setGroupCheckable,setGroupEnabled,setGroupVisible來設置菜單屬性,而無須單獨設置。
直接在代碼中添加菜單項,給菜單項分組等,這是比較傳統的做法,它存在着一些不足。比如說,爲了響應每個菜單項,我們需要用常量來保存每個菜單項的ID等。爲此,Android提供了一種更好的方式,就是把menu也定義爲應用程序的資源,通過android對資源的本地支持,使我們可以更方便地實現菜單的創建與響應。這裏我們就介紹一下使用XML文件來加載和響應菜單。
我們需要做這幾步:
在/res目錄下創建menu文件夾
在menu目錄下使用與menu相關的元素定義xml文件,文件名是隨意的,android會自動爲其生成資源ID。例如:R.menu.options對應menu目錄的options.xml資源文件
使用xml文件的資源ID,將xml文件中定義的菜單項添加到menu對象中
響應菜單項時,使用每個菜單項對應的資源ID
使用MenuInflater添加菜單項
inflater在android中建立了從資源文件到對象的橋樑,MenuInflater即把菜單xml資源轉換爲對象並添加到menu對象中,它可以通過activity的getMenuInflater()得到。我們在MainActivity中重寫onCreateOptionsMenu(...)方法。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.options, menu);
return true;
}
響應菜單項
最後重寫onOptionsItemSeleted(...)方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.nouveauId:
Intent intent = new Intent(MenuCaiDanActivity.this,
NouveauActivity.class);
startActivity(intent);
break;
case R.id.exitId:
MenuCaiDanActivity.this.finish();
break;
}
return true;
}