Android系列之UI組件----Menu菜單

來源:互聯網
上載者:User

Android系列之UI組件----Menu菜單
【本文】 從官方文檔瞭解到,從Android3.0(API level 11)開始,Android裝置不再要求提供一個專門的功能表按鈕,轉而推薦使用ActionBar。所以現在市面上很多新裝置使用三個虛擬按鍵,並不再額外提供功能表按鈕。 因為Android版本的發展,對於菜單的支援各個版本有很大的區別,而Android3.0是個分水嶺,大概可以分為下面三類: OptionMenu和ActionBar:一些操作的集合,如果開發的平台在Android3.0之上,推薦使用ActionBar,如果開發的平台在Android2.3或之下,還是可以使用OptionMenu的。ContextMenu和ActionMode:ContextMenu是一個浮動的視窗形式展現一個選項列表,ActionMode是一個顯示在螢幕頂部的操作欄,允許使用者選擇多個選項,ActionMode在Android3.0之後才有支援。Popup Menu:PopupMenu是固定在View上的模態菜單,以彈出的方式顯示,在Android3.0之後才有支援。【在XML中定義一個菜單】 Android提供了標準的XML格式的資源檔來定義功能表項目,並且對所有菜單類型都支援,推薦使用XML資源檔來定義菜單,之後再把它Inflater到Activity或者Fragment中,而不是在Activity中使用代碼聲明。 而菜單的XML資源檔,需要建立在/res/menu/目錄下,並且包含一下幾個元素: <menu>:定義一個Menu,是一個菜單資源檔的根節點,裡面可以包含一個或者多個<item>和<group>元素。<item>:建立一個MenuItem,代表了菜單中一個選項。<group>:對功能表項目進行分組,可以以組的形式操作功能表項目。<item>元素除了常規的id、icon、title屬性的支援,還有一個重要的屬性:android:showAsAction,這個屬性是起相容性的,描述了在Android的高版本中,功能表項目何時以何種方式加入到ActionBar中。 <group>是對菜單進行分組,分組後的菜單顯示效果並沒有區別,唯一的區別在於可以針對菜單組進行操作,這樣對於分類的功能表項目,操作起來更方便,提供如下的操作: Menu.setGroupCheckable():菜單組內的菜單是否都可選。Menu.setGroupVisible():是否隱藏菜單組的所有菜單。Menu.setGroupEnabled():菜單組的菜單是否有用。如果功能表項目需要單選或者多選,可以使用android:checkableBehavior屬性設定,它可以對單個<item>或者<group>設定一個組,這個屬性接受三個參數:single,單選;all,多選,none,沒有Checked的選項,預設。 當建立好一個XML菜單資源檔之後,可以使用MenuInflater.inflate()方法填充菜單資源,使XML資源變成一個可程式化的對象。   一、Options menu選項菜單: OptionMenu,選項菜單,單擊手機上的菜單鍵(MENU)出現,必須裝置具有功能表按鈕才可以觸發。因為螢幕的限制,最多隻能展示六個功能表項目,如果定義的功能表項目超出了六個,其他的功能表項目將被隱藏,第六個菜單將會顯示“更多”,點擊展開更多的菜單。雖說在Android3.0之後不再推薦使用選項菜單,但是如果使用了,在Android3.0之後的裝置上,選項功能表項目將被預設轉移到ActionBar中,這個可以通過android:showAsAction屬性控制。 建立選項菜單的核心步驟: (1)重寫Activity的onCreateOptionMenu(Menu menu)方法,當菜單第一次被載入時調用 (2)調用Menu 的add( )方法添加功能表項目(MenuItem),同時可以調用MenuItem的setIcon()方法為功能表項目設定表徵圖(註:Android 3.0之後,即使添加了表徵圖也不會顯示) (3)重寫Activity的OptionsItemSelected(MenuItem item)來響應功能表項目(MenuItem)的點擊事件 來看一下具體的代碼實現: 建立Android工程MenuTest: 【方式一】通過設定檔添加Menu選項 (1)在res/menu/main.xml中定義功能表項目。main.xml的代碼如下: 複製代碼<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    tools:context="com.example.menutest.MainActivity" >     <item        android:id="@+id/start"        android:orderInCategory="100"        android:showAsAction="never"        android:title="@string/start"/>            <item        android:id="@+id/over"        android:orderInCategory="200"        android:showAsAction="never"        android:title="@string/over"/> </menu>複製代碼註:第9行和第15行的字串引用,需要提前在strings.xml檔案中設定好。 (2)MainActivity.java: 複製代碼 1 package com.example.menutest; 2  3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.widget.Toast; 8  9 10 public class MainActivity extends Activity {11 12     @Override13     protected void onCreate(Bundle savedInstanceState) {14         super.onCreate(savedInstanceState);15         setContentView(R.layout.activity_main);16     }17 18 19     //重寫onCreateOptionMenu(Menu menu)方法,當菜單第一次被載入時調用20     @Override21     public boolean onCreateOptionsMenu(Menu menu) {22         // Inflate the menu; this adds items to the action bar if it is present.23         //填充選項菜單(讀取XML檔案、解析、載入到Menu組件上)24         getMenuInflater().inflate(R.menu.main, menu);25         return true;26     }27 28     //重寫OptionsItemSelected(MenuItem item)來響應功能表項目(MenuItem)的點擊事件(根據id來區分是哪個item)29     @Override30     public boolean onOptionsItemSelected(MenuItem item) {31         // Handle action bar item clicks here. The action bar will32         // automatically handle clicks on the Home/Up button, so long33         // as you specify a parent activity in AndroidManifest.xml.34         switch (item.getItemId()) {35         case R.id.start:36             Toast.makeText(this, "開始遊戲", Toast.LENGTH_SHORT).show();37             break;38         case R.id.over:39             Toast.makeText(this, "結束遊戲", Toast.LENGTH_SHORT).show();40             break;41 42         default:43             break;44         }45         return super.onOptionsItemSelected(item);46     }47 }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.