Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android系列之UI組件----Menu菜單

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

編輯:關於Android編程

【正文】   從官方文檔了解到,從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     @Override 13     protected void onCreate(Bundle savedInstanceState) { 14         super.onCreate(savedInstanceState); 15         setContentView(R.layout.activity_main); 16     } 17  18  19     //重寫onCreateOptionMenu(Menu menu)方法,當菜單第一次被加載時調用 20     @Override 21     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     @Override 30     public boolean onOptionsItemSelected(MenuItem item) { 31         // Handle action bar item clicks here. The action bar will 32         // automatically handle clicks on the Home/Up button, so long 33         // 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 }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved