<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Android系列之UI組件----Menu菜單

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

          作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/201609/304308.htm

          因?yàn)锳ndroid版本的發(fā)展,對(duì)于菜單的支持各個(gè)版本有很大的區(qū)別,而Android3.0是個(gè)分水嶺,大概可以分為下面三類:

          OptionMenu和ActionBar:一些操作的集合,如果開發(fā)的平臺(tái)在Android3.0之上,推薦使用ActionBar,如果開發(fā)的平臺(tái)在Android2.3或之下,還是可以使用OptionMenu的。

          ContextMenu和ActionMode:ContextMenu是一個(gè)浮動(dòng)的窗口形式展現(xiàn)一個(gè)選項(xiàng)列表,ActionMode是一個(gè)顯示在屏幕頂部的操作欄,允許用戶選擇多個(gè)選項(xiàng),ActionMode在Android3.0之后才有支持。

          Popup Menu:PopupMenu是固定在View上的模態(tài)菜單,以彈出的方式顯示,在Android3.0之后才有支持。

          【在XML中定義一個(gè)菜單】

          Android提供了標(biāo)準(zhǔn)的XML格式的資源文件來(lái)定義菜單項(xiàng),并且對(duì)所有菜單類型都支持,推薦使用XML資源文件來(lái)定義菜單,之后再把它Inflater到Activity或者Fragment中,而不是在Activity中使用代碼聲明。

          而菜單的XML資源文件,需要?jiǎng)?chuàng)建在/res/menu/目錄下,并且包含一下幾個(gè)元素:

          :定義一個(gè)Menu,是一個(gè)菜單資源文件的根節(jié)點(diǎn),里面可以包含一個(gè)或者多個(gè)元素。

          :創(chuàng)建一個(gè)MenuItem,代表了菜單中一個(gè)選項(xiàng)。

          :對(duì)菜單項(xiàng)進(jìn)行分組,可以以組的形式操作菜單項(xiàng)。

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

          是對(duì)菜單進(jìn)行分組,分組后的菜單顯示效果并沒有區(qū)別,唯一的區(qū)別在于可以針對(duì)菜單組進(jìn)行操作,這樣對(duì)于分類的菜單項(xiàng),操作起來(lái)更方便,提供如下的操作:

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

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

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

          如果菜單項(xiàng)需要單選或者多選,可以使用android:checkableBehavior屬性設(shè)置,它可以對(duì)單個(gè)或者設(shè)置一個(gè)組,這個(gè)屬性接受三個(gè)參數(shù):single,單選;all,多選,none,沒有Checked的選項(xiàng),默認(rèn)。

          當(dāng)創(chuàng)建好一個(gè)XML菜單資源文件之后,可以使用MenuInflater.inflate()方法填充菜單資源,使XML資源變成一個(gè)可編程的對(duì)象。

          一、Options menu選項(xiàng)菜單:

          OptionMenu,選項(xiàng)菜單,單擊手機(jī)上的菜單鍵(MENU)出現(xiàn),必須設(shè)備具有菜單按鈕才可以觸發(fā)。因?yàn)槠聊坏南拗?,最多只能展示六個(gè)菜單項(xiàng),如果定義的菜單項(xiàng)超出了六個(gè),其他的菜單項(xiàng)將被隱藏,第六個(gè)菜單將會(huì)顯示“更多”,點(diǎn)擊展開更多的菜單。雖說(shuō)在Android3.0之后不再推薦使用選項(xiàng)菜單,但是如果使用了,在Android3.0之后的設(shè)備上,選項(xiàng)菜單項(xiàng)將被默認(rèn)轉(zhuǎn)移到ActionBar中,這個(gè)可以通過android:showAsAction屬性控制。

          創(chuàng)建選項(xiàng)菜單的核心步驟:

          (1)重寫Activity的onCreateOptionMenu(Menu menu)方法,當(dāng)菜單第一次被加載時(shí)調(diào)用

          (2)調(diào)用Menu 的add( )方法添加菜單項(xiàng)(MenuItem),同時(shí)可以調(diào)用MenuItem的setIcon()方法為菜單項(xiàng)設(shè)置圖標(biāo)(注:Android 3.0之后,即使添加了圖標(biāo)也不會(huì)顯示)

          (3)重寫Activity的OptionsItemSelected(MenuItem item)來(lái)響應(yīng)菜單項(xiàng)(MenuItem)的點(diǎn)擊事件

          來(lái)看一下具體的代碼實(shí)現(xiàn):

          新建Android工程MenuTest:

          【方式一】通過配置文件添加Menu選項(xiàng)

          (1)在res/menu/main.xml中定義菜單項(xiàng)。main.xml的代碼如下:

          復(fù)制代碼

          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/>

          復(fù)制代碼

          注:第9行和第15行的字符串引用,需要提前在strings.xml文件中設(shè)置好。

          (2)MainActivity.java:

          復(fù)制代碼

          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)方法,當(dāng)菜單第一次被加載時(shí)調(diào)用

          20 @Override

          21 public boolean onCreateOptionsMenu(Menu menu) {

          22 // Inflate the menu; this adds items to the action bar if it is present.

          23 //填充選項(xiàng)菜單(讀取XML文件、解析、加載到Menu組件上)

          24 getMenuInflater().inflate(R.menu.main, menu);

          25 return true;

          26 }

          27

          28 //重寫OptionsItemSelected(MenuItem item)來(lái)響應(yīng)菜單項(xiàng)(MenuItem)的點(diǎn)擊事件(根據(jù)id來(lái)區(qū)分是哪個(gè)item)


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();