當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 從官方文檔了解到,從Android3.0(API level 11)開始,Android設(shè)備不再要求提供一個專門的菜單按鈕,轉(zhuǎn)而推薦使用ActionBar。所以現(xiàn)在市面上很多新設(shè)備使用三個虛擬按鍵,

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

因為Android版本的發(fā)展,對于菜單的支持各個版本有很大的區(qū)別,而Android3.0是個分水嶺,大概可以分為下面三類:

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

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

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

【在XML中定義一個菜單】

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

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

 

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

 

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

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

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

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

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

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

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

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

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

一、Options menu選項菜單:

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

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

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

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

(3)重寫Activity的OptionsItemSelected(MenuItem item)來響應(yīng)菜單項(MenuItem)的點擊事件

來看一下具體的代碼實現(xiàn):

新建Android工程MenuTest:

【方式一】通過配置文件添加Menu選項

(1)在res/menu/main.xml中定義菜單項。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)菜單第一次被加載時調(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 //填充選項菜單(讀取XML文件、解析、加載到Menu組件上)

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

25 return true;

26 }

27

28 //重寫OptionsItemSelected(MenuItem item)來響應(yīng)菜單項(MenuItem)的點擊事件(根據(jù)id來區(qū)分是哪個item)[!--empirenews.page--]

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, "結(jié)束游戲", Toast.LENGTH_SHORT).show();

40 break;

41

42 default:

43 break;

44 }

45 return super.onOptionsItemSelected(item);

46 }

47 }

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉