歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android開發之Android的菜單

Android開發之Android的菜單

日期:2017/3/1 10:45:12   编辑:Linux編程

理解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(...)方法。

  1. @Override
  2. public boolean onCreateOptionsMenu(Menu menu) {
  3. MenuInflater inflater = this.getMenuInflater();
  4. inflater.inflate(R.menu.options, menu);
  5. return true;

響應菜單項

最後重寫onOptionsItemSeleted(...)方法。

  1. @Override
  2. public boolean onOptionsItemSelected(MenuItem item) {
  3. switch (item.getItemId()) {
  4. case R.id.nouveauId:
  5. Intent intent = new Intent(MenuCaiDanActivity.this,
  6. NouveauActivity.class);
  7. startActivity(intent);
  8. break;
  9. case R.id.exitId:
  10. MenuCaiDanActivity.this.finish();
  11. break;
  12. }
  13. return true;
Copyright © Linux教程網 All Rights Reserved