新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Android系列之UI組件----Menu菜單

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

        作者: 時間:2016-09-12 來源:網絡 收藏

        從官方文檔了解到,從Android3.0(API level 11)開始,Android設備不再要求提供一個專門的菜單按鈕,轉而推薦使用ActionBar。所以現在市面上很多新設備使用三個虛擬按鍵,并不再額外提供菜單按鈕。

        本文引用地址:http://www.104case.com/article/201609/304308.htm

        因為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,是一個菜單資源文件的根節點,里面可以包含一個或者多個元素。

        :創建一個MenuItem,代表了菜單中一個選項。

        :對菜單項進行分組,可以以組的形式操作菜單項。

        元素除了常規的id、icon、title屬性的支持,還有一個重要的屬性:android:showAsAction,這個屬性是起兼容性的,描述了在Android的高版本中,菜單項何時以何種方式加入到ActionBar中。

        是對菜單進行分組,分組后的菜單顯示效果并沒有區別,唯一的區別在于可以針對菜單組進行操作,這樣對于分類的菜單項,操作起來更方便,提供如下的操作:

        Menu.setGroupCheckable():菜單組內的菜單是否都可選。

        Menu.setGroupVisible():是否隱藏菜單組的所有菜單。

        Menu.setGroupEnabled():菜單組的菜單是否有用。

        如果菜單項需要單選或者多選,可以使用android:checkableBehavior屬性設置,它可以對單個或者設置一個組,這個屬性接受三個參數: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的代碼如下:

        復制代碼

        xmlns:tools=http://schemas.android.com/tools

        tools:context=com.example.menutest.MainActivity >

        android:id=@+id/start

        android:orderInCategory=100

        android:showAsAction=never

        android:title=@string/start/>

        android:id=@+id/over

        android:orderInCategory=200

        android:showAsAction=never

        android:title=@string/over/>

        復制代碼

        注:第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)


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 华阴市| 林甸县| 翁源县| 甘泉县| 山东省| 汉源县| 伊吾县| 高雄县| 抚顺市| 高邑县| 甘谷县| 蓬安县| 天等县| 洞头县| 壶关县| 巴青县| 宜春市| 宝坻区| 白朗县| 新巴尔虎左旗| 柳江县| 专栏| 巩义市| 三亚市| 车致| 普兰店市| 桂平市| 罗平县| 西贡区| 上蔡县| 赤水市| 同心县| 深泽县| 奉贤区| 唐河县| 宜宾县| 邻水| 横峰县| 呼伦贝尔市| 凤阳县| 嘉义县|