Android開發之android的菜單

理解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;

   }


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章