第7章-Android菜單和對話框課件_第1頁
第7章-Android菜單和對話框課件_第2頁
第7章-Android菜單和對話框課件_第3頁
第7章-Android菜單和對話框課件_第4頁
第7章-Android菜單和對話框課件_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Android基礎(chǔ)與應(yīng)用開發(fā)教程大連理工大學(xué)出版社Android大連理工大學(xué)出版社1Android菜單和對話框第7章Android第7章7.1Android菜單7.1Android菜單37.1Android菜單7.1Android菜單47.1Android菜單在AndroidSDK中,創(chuàng)建菜單對象不必從零開始。因?yàn)橐粋€(gè)活動(dòng)只與一個(gè)菜單相關(guān)聯(lián),因此Android創(chuàng)建這個(gè)菜單并將它傳遞給onCreateOptionsMenu()回調(diào)方法。這個(gè)方法讓菜單和菜單項(xiàng)聯(lián)系在一起,見下述代碼:7.1.1文本框組件TextView7.1Android菜單在AndroidSDK中,創(chuàng)57.1Android菜單1.Activity類的回調(diào)方法onOptionsItemSelected()單擊菜單項(xiàng)時(shí)Android調(diào)用Activity類的回調(diào)方法onOptionsItemSelected(),其代碼如下:7.1.2菜單項(xiàng)的響應(yīng)7.1Android菜單1.Activity類的回67.1Android菜單2.通過監(jiān)聽器響應(yīng)菜單項(xiàng)為了得到較好的性能,通常重載onOptionsItemSelected)方法來響應(yīng)菜單。7.1.2菜單項(xiàng)的響應(yīng)7.1Android菜單2.通過監(jiān)聽器響應(yīng)菜單項(xiàng)7.177.1Android菜單3.使用Intent響應(yīng)菜單項(xiàng)利用MenuItem類的setIntent(intent)方法可將菜單項(xiàng)與意圖關(guān)聯(lián)起來(菜單項(xiàng)默認(rèn)不與意圖關(guān)聯(lián))。但關(guān)聯(lián)后,別的東西就不再處理菜單項(xiàng)了,而是默認(rèn)地利用startActivity(intent)去調(diào)用意圖。為了能順利工作,所有處理程序,尤其是onOptionsItemSelected()方法,應(yīng)當(dāng)調(diào)用其父類的onOptionsItemSelected)方法去處理不被處理的項(xiàng)。也就是說,系統(tǒng)給onOptionsItemSelected()一次機(jī)會(huì)首先去處理菜單項(xiàng)。(當(dāng)然,接著就輪到監(jiān)聽器了)。如果不重載onOptionsItemSelected)方法,則Android架構(gòu)的基類就會(huì)對菜單項(xiàng)做激活意圖所需的事情;如果重載了這個(gè)方法且又不想用這個(gè)菜單項(xiàng),就必須調(diào)用父方法,它會(huì)方便意圖的調(diào)用。因此我們的做法是:要么不重載onOptionsItemSelected方法,要么重載它并激活不想處理的菜單項(xiàng)的父方法。7.1.2菜單項(xiàng)的響應(yīng)7.1Android菜單3.使用Intent響應(yīng)菜單項(xiàng)87.1Android菜單7.1.3創(chuàng)建菜單的測試工具7.1Android菜單7.1.3創(chuàng)建菜單的測試工97.1Android菜單實(shí)現(xiàn)這個(gè)測試工具的步驟共分7步:①創(chuàng)建XML布局文件;②創(chuàng)建該布局文件的活動(dòng)類;③建立菜單;④添加菜單項(xiàng);⑤添加二級菜單項(xiàng);⑥添加菜單項(xiàng)的響應(yīng);⑦修改AndroidManifest.xml文件。7.1.3創(chuàng)建菜單的測試工具7.1Android菜單實(shí)現(xiàn)這個(gè)測試工具的步驟共分7107.2其他菜單類型注意,當(dāng)應(yīng)用程序具有超過屏幕所能顯示的更多菜單項(xiàng)時(shí),在屏幕的右下角就會(huì)自動(dòng)出現(xiàn)一個(gè)More菜單項(xiàng),它就是所謂的擴(kuò)展型(expanded)菜單。擴(kuò)展型菜單有局限性,它不能使用圖標(biāo)。用戶只要單擊More菜單項(xiàng)就能看到這些無圖標(biāo)的菜單。7.2.1擴(kuò)展型菜單Android不僅支持文本,也支持圖像或圖標(biāo)菜單,即用圖代替文本的菜單。但使用圖標(biāo)菜單需注意幾個(gè)限制:①不能用圖標(biāo)菜單表示擴(kuò)展型菜單;②圖標(biāo)菜單項(xiàng)不支持選中標(biāo)志;③如果圖標(biāo)菜單項(xiàng)中的文本過長,文本會(huì)被截短(也適用于文本菜單項(xiàng)),這取決于顯示尺度。7.2.2圖標(biāo)菜單7.2其他菜單類型注意,當(dāng)應(yīng)用程序具有超過屏幕所能顯示117.2其他菜單類型一個(gè)菜單對象可包含多個(gè)子菜單(SubMenu)對象。每個(gè)子菜單對象都可調(diào)用Menu.addSubMenu()方法添加到菜單對象內(nèi)(見代碼7-9)。向子菜單中添加菜單項(xiàng)與向菜單中添加菜單項(xiàng)相同,因?yàn)樽硬藛问菑牟藛螌ο笈缮鰜淼摹5?,不能再向子菜單中添加另外的子菜單。圖7-1給出了菜單與子菜單之間的結(jié)構(gòu)關(guān)系。7.2.3子菜單大多數(shù)Windows應(yīng)用程序都帶有諸如File,Edit,View,Open,Close和Exit等菜單。這些菜單稱為系統(tǒng)菜單。AndroidSDK創(chuàng)建選項(xiàng)菜單時(shí),系統(tǒng)也可插人類似的一套菜單。但是AndroidSDK2.0版并不能添加這些菜單,程序員可以通過代碼添加系統(tǒng)菜單。調(diào)用基類(Activity)的onCreateOptionsMenu()方法可將系統(tǒng)菜單添加到由常數(shù)CATEGORY_SYSTEM標(biāo)識的組內(nèi)。7.2.4系統(tǒng)菜單7.2其他菜單類型一個(gè)菜單對象可包含多個(gè)子菜單(Sub127.2其他菜單類型桌面程序廣泛使用上下文菜單,譬如在Windows中右擊某個(gè)UI元素就可以訪問上下文菜單。Android通過所謂長單擊的活動(dòng)支持上下文菜單。長單擊是鼠標(biāo)在Andriod視圖上按下的時(shí)間稍長。在手機(jī)類的設(shè)備上鼠標(biāo)單擊可用多種辦法實(shí)現(xiàn),這取決于導(dǎo)航機(jī)制:在手機(jī)上下述幾種情況都相當(dāng)于鼠標(biāo)單擊:按手機(jī)上的轉(zhuǎn)輪、輕擊或輕按手機(jī)觸摸板,或手機(jī)按移動(dòng)箭頭按鈕并單擊箭頭組中間的按鈕等??傊徽撛O(shè)備上鼠標(biāo)單擊如何實(shí)現(xiàn),鼠標(biāo)單擊持續(xù)較長時(shí)間都是長單擊。7.2.5上下文菜單7.2其他菜單類型桌面程序廣泛使用上下文菜單,譬如在137.2其他菜單類型7.2.5上下文菜單7.2其他菜單類型7.2.5上下文菜單147.2其他菜單類型7.2.6替換菜單Android引人了一個(gè)新的菜單概念,即替換(alternative)菜單,它可把替換菜單項(xiàng)用作選項(xiàng)菜單、子菜單和上下文菜單的一部分。其特點(diǎn)是多個(gè)Android應(yīng)用程序可相互使用它,即某應(yīng)用程序包含另一應(yīng)用程序的菜單,所以它是Android應(yīng)用程序間通信或?qū)嵱眉軜?gòu)的一部分。選中選擇菜單時(shí),目標(biāo)應(yīng)用程序或活動(dòng)就會(huì)用所需的數(shù)據(jù)URL啟動(dòng),并使用被傳送意圖中的數(shù)據(jù)URL?,F(xiàn)在需要使用第4章中有關(guān)內(nèi)容提供者、內(nèi)容URI、內(nèi)容MIME類型和意圖等概念。7.2其他菜單類型7.2.6替換菜單Android157.2其他菜單類型7.2.7菜單對數(shù)據(jù)變化的響應(yīng)到目前為止,我們涉及的只是靜態(tài)菜單,它們不會(huì)隨屏幕變化動(dòng)態(tài)地改變。創(chuàng)建動(dòng)態(tài)菜單必須使用Android提供的onPrepareOptionsMenu)方法[6],它為待顯示在屏幕上的標(biāo)準(zhǔn)選項(xiàng)菜單做準(zhǔn)備。菜單每次顯示時(shí),它在該菜單顯示之前被調(diào)用。使用此方法能有效地啟用/禁用項(xiàng)目,或動(dòng)態(tài)修改其內(nèi)容。默認(rèn)的實(shí)現(xiàn)能根據(jù)活動(dòng)的狀態(tài)更新系統(tǒng)菜單項(xiàng)目。派生類應(yīng)該始終用基類的實(shí)現(xiàn)調(diào)用。設(shè)計(jì)菜單功能時(shí)應(yīng)牢記這些。其參數(shù)為上次顯示或onCreateOptionsMenu()首次初始化的選項(xiàng)菜單。若返回true則顯示要顯示的菜單,返回false將不會(huì)顯示菜單。7.2其他菜單類型7.2.7菜單對數(shù)據(jù)變化的響應(yīng)到167.3通過XML文件加載菜單7.3.1XML菜單資源文件的結(jié)構(gòu)定義菜單的XML文件的代碼示于代碼7-14中。其中用同等級的menu標(biāo)記開始,后面跟著一系列<group>標(biāo)記定義菜單項(xiàng)組,以及一系列<item>定義菜單項(xiàng)。每個(gè)組合菜單項(xiàng)都分別用自己的@+記指定其記。此外,每個(gè)記后面都關(guān)聯(lián)一個(gè)符號名字。如menuGroup_main和menu_testPick等。7.3通過XML文件加載菜單7.3.1XML菜單177.3通過XML文件加載菜單7.3.2XML菜單資源文件的展開假定代碼7-14的XML文件名為my_menu.xml,并存人/res/menu子目錄內(nèi)。這將會(huì)自動(dòng)生成一個(gè)資源引用id,即R,menu.my_menuoAndroid提供了一個(gè)android.view.MenuInflater類,它可借助這個(gè)菜單資源引用id,用XML文件中的菜單定義來填寫Menu對象。具體的實(shí)現(xiàn)代碼如下:7.3通過XML文件加載菜單7.3.2XML菜單187.3通過XML文件加載菜單7.3.3對XML菜單項(xiàng)的響應(yīng)響應(yīng)XML菜單項(xiàng)的方式與編程創(chuàng)建菜單的響應(yīng)方式相同,但也有微小的差別。像以前一樣,將在onOptionsItemSelected回調(diào)方法中處理菜單項(xiàng)的響應(yīng)。但此時(shí)可從Android資源獲得某些幫助(見4.1.3節(jié))。如7.3.1節(jié)所述,Android同時(shí)自動(dòng)生成XML文件的資源ID和菜單項(xiàng)ID來區(qū)別各菜單項(xiàng)。這有利于菜單項(xiàng)的響應(yīng),因?yàn)椴恍枰赬ML菜單文件內(nèi)給這些ID定義常數(shù)和考慮其唯一性,因?yàn)橘Y源ID生成過程已考慮到這些。7.3通過XML文件加載菜單7.3.3對XML菜197.3通過XML文件加載菜單7.3.4附加的XML菜單標(biāo)記在構(gòu)造XML文件時(shí),必須知道可能使用的各種XML標(biāo)記。查看AndroidSDK中的API演示(demos)就能很快獲得這些信息。這些AndroidAPI演示包含了一系列菜單來幫助查看Android的各種編程問題??匆幌?res/menu子目錄也可發(fā)現(xiàn)許多XML菜單的例子。在此簡述一些重要的標(biāo)記。7.3通過XML文件加載菜單7.3.4附加的XM207.3通過XML文件加載菜單7.3.4附加的XML菜單標(biāo)記7.3通過XML文件加載菜單7.3.4附加的XM217.4Android對話框7.4.1警告對話框警告對話框(Alert)通常包含確認(rèn)表單或調(diào)試的簡單消息??紤]下面HTML頁面中常見的調(diào)試示例:Android未直接提供創(chuàng)建警告對話框的函數(shù),我們只能用警告對話框構(gòu)建器android.app.AlertDialog.Builde:類來構(gòu)建和處理警告對話框。該構(gòu)建器類構(gòu)建的對話框可執(zhí)行的任務(wù)是:①讀取消息并用Yes或No進(jìn)行響應(yīng);②從其列表中挑選一個(gè)或多個(gè)項(xiàng)目;③觀察應(yīng)用程序進(jìn)展情況;④從一組選項(xiàng)中選取一個(gè)選項(xiàng);⑤繼續(xù)運(yùn)行程序之前提示用戶進(jìn)行響應(yīng)。7.4Android對話框7.4.1警告對話框警227.4Android對話框7.4.1警告對話框構(gòu)建這些對話框和用菜單項(xiàng)激活該對話框需遵循的步驟為:①構(gòu)建Builder對象;②設(shè)置其顯示參數(shù),譬如按鈕數(shù)量、項(xiàng)目列表等;③設(shè)置這些按鈕的回調(diào)方法;④啟動(dòng)Builder具體構(gòu)建對話框,其類型取決于Builder對象的設(shè)置;⑤利用Dialog.show()顯示對話框。7.4Android對話框7.4.1警告對話框構(gòu)237.4Android對話框7.4.2提示對話框創(chuàng)建提示對話框所要遵循的步驟是:①為提示對話框提供一個(gè)布局視圖;②將該布局加載到視圖類內(nèi);③構(gòu)建一個(gè)Builder對象;④在Builder對象內(nèi)設(shè)置該視圖;⑤設(shè)置按鈕和它們的回調(diào)來捕捉輸人的文本;⑥用警告對話框builder來創(chuàng)建該對話框;⑦顯示該對話框。7.4Android對話框7.4.2提示對話框創(chuàng)247.5進(jìn)度條對話框進(jìn)度條對話框(ProgressDialog)是AlertDialog類的擴(kuò)展,它可用兩種形式顯示任務(wù)的進(jìn)度:用紡車形式顯示進(jìn)度(對于進(jìn)度不確定的任務(wù),見圖7-6)和用進(jìn)度條顯示進(jìn)度(而對于進(jìn)度確定的任務(wù),見圖7-7)。進(jìn)度條對話框也可以提供按鈕,譬如取消下載的按鈕等。7.5進(jìn)度條對話框進(jìn)度條對話框(ProgressDia257.5進(jìn)度條對話框7.5.1顯示進(jìn)度條顯示進(jìn)度條動(dòng)畫的操作步驟為:①用ProgressDialog類的構(gòu)造函數(shù)ProgressDialog(Context)進(jìn)行初始化;②用setProgressStyle(int)設(shè)置進(jìn)度樣式為STYLEHORIZONTAL,并設(shè)置其他屬性,如消息;③調(diào)用show)或用onCreateDialog(int)回調(diào)來返回ProgressDialog,為顯示對話做好準(zhǔn)備;④用迄今完成的總百分量調(diào)用setProgress(int)或用該總百分量與增量值之和調(diào)用incrementProgressBy(int)都可增加顯示的進(jìn)度量。7.5進(jìn)度條對話框7.5.1顯示進(jìn)度條顯示進(jìn)度條267.6托管對話框托管對話框(manageddialog)是在其生命周期內(nèi)由活動(dòng)管理的對話框。前面諸例子中所創(chuàng)建的對話框,其生命周期都是由對話框自己管理的。自己管理的優(yōu)點(diǎn)是代碼比較簡單明了,需要時(shí)就創(chuàng)建,完成后就自動(dòng)銷毀;缺點(diǎn)是每次調(diào)用都需要?jiǎng)?chuàng)建對話框?qū)ο螅瑑?nèi)存開銷比較大。而托管對話框只創(chuàng)建一次就能多次使用,所以其核心概念是復(fù)用(Multiplex),它是一種資源池概念。7.6托管對話框托管對話框(manageddialo277.7本章小結(jié)我們對于Android的菜單和對話框做了較全面的介紹,它們是UI編程中的重要組件。通過這些介紹,我們可了解Android中各種菜單的使用方法,包括子菜單、圖標(biāo)菜單、上下文菜單和替換菜單。同時(shí)闡述了用XML菜單資源來提高菜單的效率的問題。我們還建立了菜單的測試工具,它不僅可用于測試菜單,而且可用于其他程序的測試。菜單提供了激活和測試新功能的簡單手段。本章也闡述了Android對話框所具有的特殊挑戰(zhàn)性。其中包括異步對話框和模態(tài)對話框的意義,并介紹了托管對話框的意義和用法。7.7本章小結(jié)我們對于Android的菜單和對話框做了28感謝觀看感謝觀看29Android基礎(chǔ)與應(yīng)用開發(fā)教程大連理工大學(xué)出版社Android大連理工大學(xué)出版社30Android菜單和對話框第7章Android第7章7.1Android菜單7.1Android菜單327.1Android菜單7.1Android菜單337.1Android菜單在AndroidSDK中,創(chuàng)建菜單對象不必從零開始。因?yàn)橐粋€(gè)活動(dòng)只與一個(gè)菜單相關(guān)聯(lián),因此Android創(chuàng)建這個(gè)菜單并將它傳遞給onCreateOptionsMenu()回調(diào)方法。這個(gè)方法讓菜單和菜單項(xiàng)聯(lián)系在一起,見下述代碼:7.1.1文本框組件TextView7.1Android菜單在AndroidSDK中,創(chuàng)347.1Android菜單1.Activity類的回調(diào)方法onOptionsItemSelected()單擊菜單項(xiàng)時(shí)Android調(diào)用Activity類的回調(diào)方法onOptionsItemSelected(),其代碼如下:7.1.2菜單項(xiàng)的響應(yīng)7.1Android菜單1.Activity類的回357.1Android菜單2.通過監(jiān)聽器響應(yīng)菜單項(xiàng)為了得到較好的性能,通常重載onOptionsItemSelected)方法來響應(yīng)菜單。7.1.2菜單項(xiàng)的響應(yīng)7.1Android菜單2.通過監(jiān)聽器響應(yīng)菜單項(xiàng)7.1367.1Android菜單3.使用Intent響應(yīng)菜單項(xiàng)利用MenuItem類的setIntent(intent)方法可將菜單項(xiàng)與意圖關(guān)聯(lián)起來(菜單項(xiàng)默認(rèn)不與意圖關(guān)聯(lián))。但關(guān)聯(lián)后,別的東西就不再處理菜單項(xiàng)了,而是默認(rèn)地利用startActivity(intent)去調(diào)用意圖。為了能順利工作,所有處理程序,尤其是onOptionsItemSelected()方法,應(yīng)當(dāng)調(diào)用其父類的onOptionsItemSelected)方法去處理不被處理的項(xiàng)。也就是說,系統(tǒng)給onOptionsItemSelected()一次機(jī)會(huì)首先去處理菜單項(xiàng)。(當(dāng)然,接著就輪到監(jiān)聽器了)。如果不重載onOptionsItemSelected)方法,則Android架構(gòu)的基類就會(huì)對菜單項(xiàng)做激活意圖所需的事情;如果重載了這個(gè)方法且又不想用這個(gè)菜單項(xiàng),就必須調(diào)用父方法,它會(huì)方便意圖的調(diào)用。因此我們的做法是:要么不重載onOptionsItemSelected方法,要么重載它并激活不想處理的菜單項(xiàng)的父方法。7.1.2菜單項(xiàng)的響應(yīng)7.1Android菜單3.使用Intent響應(yīng)菜單項(xiàng)377.1Android菜單7.1.3創(chuàng)建菜單的測試工具7.1Android菜單7.1.3創(chuàng)建菜單的測試工387.1Android菜單實(shí)現(xiàn)這個(gè)測試工具的步驟共分7步:①創(chuàng)建XML布局文件;②創(chuàng)建該布局文件的活動(dòng)類;③建立菜單;④添加菜單項(xiàng);⑤添加二級菜單項(xiàng);⑥添加菜單項(xiàng)的響應(yīng);⑦修改AndroidManifest.xml文件。7.1.3創(chuàng)建菜單的測試工具7.1Android菜單實(shí)現(xiàn)這個(gè)測試工具的步驟共分7397.2其他菜單類型注意,當(dāng)應(yīng)用程序具有超過屏幕所能顯示的更多菜單項(xiàng)時(shí),在屏幕的右下角就會(huì)自動(dòng)出現(xiàn)一個(gè)More菜單項(xiàng),它就是所謂的擴(kuò)展型(expanded)菜單。擴(kuò)展型菜單有局限性,它不能使用圖標(biāo)。用戶只要單擊More菜單項(xiàng)就能看到這些無圖標(biāo)的菜單。7.2.1擴(kuò)展型菜單Android不僅支持文本,也支持圖像或圖標(biāo)菜單,即用圖代替文本的菜單。但使用圖標(biāo)菜單需注意幾個(gè)限制:①不能用圖標(biāo)菜單表示擴(kuò)展型菜單;②圖標(biāo)菜單項(xiàng)不支持選中標(biāo)志;③如果圖標(biāo)菜單項(xiàng)中的文本過長,文本會(huì)被截短(也適用于文本菜單項(xiàng)),這取決于顯示尺度。7.2.2圖標(biāo)菜單7.2其他菜單類型注意,當(dāng)應(yīng)用程序具有超過屏幕所能顯示407.2其他菜單類型一個(gè)菜單對象可包含多個(gè)子菜單(SubMenu)對象。每個(gè)子菜單對象都可調(diào)用Menu.addSubMenu()方法添加到菜單對象內(nèi)(見代碼7-9)。向子菜單中添加菜單項(xiàng)與向菜單中添加菜單項(xiàng)相同,因?yàn)樽硬藛问菑牟藛螌ο笈缮鰜淼摹5?,不能再向子菜單中添加另外的子菜單。圖7-1給出了菜單與子菜單之間的結(jié)構(gòu)關(guān)系。7.2.3子菜單大多數(shù)Windows應(yīng)用程序都帶有諸如File,Edit,View,Open,Close和Exit等菜單。這些菜單稱為系統(tǒng)菜單。AndroidSDK創(chuàng)建選項(xiàng)菜單時(shí),系統(tǒng)也可插人類似的一套菜單。但是AndroidSDK2.0版并不能添加這些菜單,程序員可以通過代碼添加系統(tǒng)菜單。調(diào)用基類(Activity)的onCreateOptionsMenu()方法可將系統(tǒng)菜單添加到由常數(shù)CATEGORY_SYSTEM標(biāo)識的組內(nèi)。7.2.4系統(tǒng)菜單7.2其他菜單類型一個(gè)菜單對象可包含多個(gè)子菜單(Sub417.2其他菜單類型桌面程序廣泛使用上下文菜單,譬如在Windows中右擊某個(gè)UI元素就可以訪問上下文菜單。Android通過所謂長單擊的活動(dòng)支持上下文菜單。長單擊是鼠標(biāo)在Andriod視圖上按下的時(shí)間稍長。在手機(jī)類的設(shè)備上鼠標(biāo)單擊可用多種辦法實(shí)現(xiàn),這取決于導(dǎo)航機(jī)制:在手機(jī)上下述幾種情況都相當(dāng)于鼠標(biāo)單擊:按手機(jī)上的轉(zhuǎn)輪、輕擊或輕按手機(jī)觸摸板,或手機(jī)按移動(dòng)箭頭按鈕并單擊箭頭組中間的按鈕等??傊?,不論設(shè)備上鼠標(biāo)單擊如何實(shí)現(xiàn),鼠標(biāo)單擊持續(xù)較長時(shí)間都是長單擊。7.2.5上下文菜單7.2其他菜單類型桌面程序廣泛使用上下文菜單,譬如在427.2其他菜單類型7.2.5上下文菜單7.2其他菜單類型7.2.5上下文菜單437.2其他菜單類型7.2.6替換菜單Android引人了一個(gè)新的菜單概念,即替換(alternative)菜單,它可把替換菜單項(xiàng)用作選項(xiàng)菜單、子菜單和上下文菜單的一部分。其特點(diǎn)是多個(gè)Android應(yīng)用程序可相互使用它,即某應(yīng)用程序包含另一應(yīng)用程序的菜單,所以它是Android應(yīng)用程序間通信或?qū)嵱眉軜?gòu)的一部分。選中選擇菜單時(shí),目標(biāo)應(yīng)用程序或活動(dòng)就會(huì)用所需的數(shù)據(jù)URL啟動(dòng),并使用被傳送意圖中的數(shù)據(jù)URL?,F(xiàn)在需要使用第4章中有關(guān)內(nèi)容提供者、內(nèi)容URI、內(nèi)容MIME類型和意圖等概念。7.2其他菜單類型7.2.6替換菜單Android447.2其他菜單類型7.2.7菜單對數(shù)據(jù)變化的響應(yīng)到目前為止,我們涉及的只是靜態(tài)菜單,它們不會(huì)隨屏幕變化動(dòng)態(tài)地改變。創(chuàng)建動(dòng)態(tài)菜單必須使用Android提供的onPrepareOptionsMenu)方法[6],它為待顯示在屏幕上的標(biāo)準(zhǔn)選項(xiàng)菜單做準(zhǔn)備。菜單每次顯示時(shí),它在該菜單顯示之前被調(diào)用。使用此方法能有效地啟用/禁用項(xiàng)目,或動(dòng)態(tài)修改其內(nèi)容。默認(rèn)的實(shí)現(xiàn)能根據(jù)活動(dòng)的狀態(tài)更新系統(tǒng)菜單項(xiàng)目。派生類應(yīng)該始終用基類的實(shí)現(xiàn)調(diào)用。設(shè)計(jì)菜單功能時(shí)應(yīng)牢記這些。其參數(shù)為上次顯示或onCreateOptionsMenu()首次初始化的選項(xiàng)菜單。若返回true則顯示要顯示的菜單,返回false將不會(huì)顯示菜單。7.2其他菜單類型7.2.7菜單對數(shù)據(jù)變化的響應(yīng)到457.3通過XML文件加載菜單7.3.1XML菜單資源文件的結(jié)構(gòu)定義菜單的XML文件的代碼示于代碼7-14中。其中用同等級的menu標(biāo)記開始,后面跟著一系列<group>標(biāo)記定義菜單項(xiàng)組,以及一系列<item>定義菜單項(xiàng)。每個(gè)組合菜單項(xiàng)都分別用自己的@+記指定其記。此外,每個(gè)記后面都關(guān)聯(lián)一個(gè)符號名字。如menuGroup_main和menu_testPick等。7.3通過XML文件加載菜單7.3.1XML菜單467.3通過XML文件加載菜單7.3.2XML菜單資源文件的展開假定代碼7-14的XML文件名為my_menu.xml,并存人/res/menu子目錄內(nèi)。這將會(huì)自動(dòng)生成一個(gè)資源引用id,即R,menu.my_menuoAndroid提供了一個(gè)android.view.MenuInflater類,它可借助這個(gè)菜單資源引用id,用XML文件中的菜單定義來填寫Menu對象。具體的實(shí)現(xiàn)代碼如下:7.3通過XML文件加載菜單7.3.2XML菜單477.3通過XML文件加載菜單7.3.3對XML菜單項(xiàng)的響應(yīng)響應(yīng)XML菜單項(xiàng)的方式與編程創(chuàng)建菜單的響應(yīng)方式相同,但也有微小的差別。像以前一樣,將在onOptionsItemSelected回調(diào)方法中處理菜單項(xiàng)的響應(yīng)。但此時(shí)可從Android資源獲得某些幫助(見4.1.3節(jié))。如7.3.1節(jié)所述,Android同時(shí)自動(dòng)生成XML文件的資源ID和菜單項(xiàng)ID來區(qū)別各菜單項(xiàng)。這有利于菜單項(xiàng)的響應(yīng),因?yàn)椴恍枰赬ML菜單文件內(nèi)給這些ID定義常數(shù)和考慮其唯一性,因?yàn)橘Y源ID生成過程已考慮到這些。7.3通過XML文件加載菜單7.3.3對XML菜487.3通過XML文件加載菜單7.3.4附加的XML菜單標(biāo)記在構(gòu)造XML文件時(shí),必須知道可能使用的各種XML標(biāo)記。查看AndroidSDK中的API演示(demos)就能很快獲得這些信息。這些AndroidAPI演示包含了一系列菜單來幫助查看Android的各種編程問題??匆幌?res/menu子目錄也可發(fā)現(xiàn)許多XML菜單的例子。在此簡述一些重要的標(biāo)記。7.3通過XML文件加載菜單7.3.4附加的XM497.3通過XML文件加載菜單7.3.4附加的XML菜單標(biāo)記7.3通過XML文件加載菜單7.3.4附加的XM507.4Android對話框7.4.1警告對話框警告對話框(Alert)通常包含確認(rèn)表單或調(diào)試的簡單消息。考慮下面HTML頁面中常見的調(diào)試示例:Android未直接提供創(chuàng)建警告對話框的函數(shù),我們只能用警告對話框構(gòu)建器android.app.AlertDialog.Builde:類來構(gòu)建和處理警告對話框。該構(gòu)建器類構(gòu)建的對話框可執(zhí)行的任務(wù)是:①讀取消息并用Yes或No進(jìn)行響應(yīng);②從其列表中挑選一個(gè)或多個(gè)項(xiàng)目;③觀察應(yīng)用程序進(jìn)展情況;④從一組選項(xiàng)中選取一個(gè)選項(xiàng);⑤繼續(xù)運(yùn)行程序之前提示用戶進(jìn)行響應(yīng)。7.4Android對話框7.4.1警告對話框警517.4Android對話框7.4.1警告對話框構(gòu)建這些對話框和用菜單項(xiàng)激活該對話框需遵循的步驟為:①構(gòu)建Builder對象;②設(shè)置其顯示參數(shù),譬如按鈕數(shù)量、項(xiàng)目列表等;③設(shè)置這些按鈕的回調(diào)方法;④啟動(dòng)Builder具體構(gòu)建對話框,其類型取決于Builder對象的設(shè)置;⑤利用Dialog.show()顯示對話框。7.4Android對話框7.4.1警告對話框構(gòu)527.4Android對話框7.4.2提示對話框創(chuàng)建提示對話框所要遵循的步驟是:①為提示對話框提供一個(gè)布局視

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論