理解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(...)方法。
響應菜單項
最後重寫onOptionsItemSeleted(...)方法。