Android官方開發(fā)教程中文版一_第1頁
Android官方開發(fā)教程中文版一_第2頁
Android官方開發(fā)教程中文版一_第3頁
Android官方開發(fā)教程中文版一_第4頁
Android官方開發(fā)教程中文版一_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余11頁可下載查看

下載本文檔

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

文檔簡介

1、Android官方開發(fā)教程中文版創(chuàng)建你的第一個(gè)App創(chuàng)建你的第一個(gè)App歡迎加入Android應(yīng)用開發(fā)。本課程將教你如何創(chuàng)建你的首個(gè)Android應(yīng)用。你將學(xué)習(xí)到如何創(chuàng)建Android項(xiàng)目和運(yùn)行它的可調(diào)試版本。你還會(huì)學(xué)習(xí)到Android應(yīng)用設(shè)計(jì)的基本原理,包括如何創(chuàng)建簡單用戶界面和處理用戶輸入。在你開始本課程之前,你要確信你的開發(fā)環(huán)境已經(jīng)設(shè)置好,你需要:1,下載AndroidSDK。2 .為Eclipse安裝ADT插件(如果你的IDE是Eclipse)。3 .使用SDKManager下載最新的SDK工具和平臺(tái)。如果你還沒有完成這些任務(wù),那么開始下載AndroidSDK并完成隨后的安裝步驟。一旦

2、你完成安裝,也就做好了開始本課程的準(zhǔn)備工作。本課程采用教程的格式,通過逐步構(gòu)建一個(gè)小型的Android應(yīng)用,教你了解一些關(guān)于Android開發(fā)的基本概念,因此,你應(yīng)該遵循教程中的每一個(gè)步驟。創(chuàng)建Android項(xiàng)目一個(gè)Android項(xiàng)目包含Android應(yīng)用的所有文件以及源代碼。AndroidSDK工具可以很輕松地使用默認(rèn)的目錄和文件開始一個(gè)新的Android項(xiàng)目。本課程將演示如何使用Eclipse(含ADT插件)或SDK工具從命令行創(chuàng)建新項(xiàng)目。注意:你應(yīng)該已經(jīng)安裝了AndroidSDK,并且如果彳使用的是Eclipse,那么你也應(yīng)該安裝了ADT插件(版本21.0.0或更高),如果你還沒有完成這

3、些,在開始本課程之前請(qǐng)按照前面的指南安裝AndroidSDK。使用Eclipse&J建項(xiàng)目1 .在工具樣上點(diǎn)擊Newr3。2 .在出現(xiàn)的窗口中,打開Android文件夾,選擇AndroidApplicationProject點(diǎn)擊Next。3 .填寫以下內(nèi)容:ApplicationName:用戶看到的應(yīng)用名稱,在本項(xiàng)目中,使用“MyFirstApp",ProjectName:項(xiàng)目目錄的名稱,并且在Eclipse中也能看到的名稱。PackageName:應(yīng)用的包名(遵循Java程序語言中包的命名規(guī)則)。你的包名在所有安裝到Android系統(tǒng)的包中必須是唯一的,因此,包名最好是你的

4、組織或出版商的域名反轉(zhuǎn)。在本項(xiàng)目中,你可以使用類似“com.example.myfirstapp”的包名。無論如何,你不能使用"com.example”的包命在谷歌發(fā)布你的應(yīng)用。MinimumRequiredSDK:你的應(yīng)用支持的Android系統(tǒng)的最低版本和它使用的API級(jí)別。為了支持盡可能多的設(shè)備,你應(yīng)該將它設(shè)置為所允許的最低版本以允許你的應(yīng)用提供所有核心功能。如果你的應(yīng)用中某個(gè)功能只能在新版本的Android系統(tǒng)中運(yùn)行,并且它不是核心功能的關(guān)鍵部分,你可以啟用僅在支持的版本上運(yùn)行該功能(我們將在支持不同平臺(tái)版本”中進(jìn)一步討論)。本項(xiàng)目中使用默認(rèn)值。TargetSDK表示用來測(cè)試

5、你的應(yīng)用的Android系統(tǒng)的最高版本和API級(jí)別。當(dāng)新的Android系統(tǒng)可用時(shí),你應(yīng)該在新版本上測(cè)試你的應(yīng)用并更新這個(gè)值以匹配最新的API級(jí)別,從而利用新的平臺(tái)特性。CompileWith:用以編譯你的應(yīng)用的平臺(tái)版本。默認(rèn)情況下,這會(huì)設(shè)置為你的SDK中可用的最新版本的Android系統(tǒng)(應(yīng)該是Android4.1或更高版本,如果你沒這樣一個(gè)可用版本,你必須用SDKManager安裝一個(gè))。你仍然可以創(chuàng)建支持舊版本的應(yīng)用,但把構(gòu)建目標(biāo)設(shè)置為最新版本可以允許你啟用新功能并且在最新設(shè)備上優(yōu)化你的應(yīng)用以便為用戶提供更好的用戶體驗(yàn)。Theme:你的應(yīng)用使用的Android界面風(fēng)格。你可以保持默認(rèn)值。

6、圖一Eclipse的創(chuàng)建新Android項(xiàng)目的向?qū)c(diǎn)擊Next。4 .在配置項(xiàng)目的下一個(gè)屏幕中,使用默認(rèn)選項(xiàng),點(diǎn)擊Next。5 .下一個(gè)屏幕可以幫助你為你的應(yīng)用創(chuàng)建一個(gè)執(zhí)行圖標(biāo)。你可以用多種方式自定義一個(gè)圖標(biāo),用工具為不同屏幕分辨率生成圖標(biāo)。在發(fā)布你的應(yīng)用之前,你應(yīng)該確保你的圖標(biāo)符合設(shè)計(jì)指南定義的規(guī)范。點(diǎn)擊Next。6 .現(xiàn)在你可以選擇一個(gè)Activity模板來創(chuàng)建你的應(yīng)用。本項(xiàng)目中,選擇BlankActivity并且點(diǎn)擊Next。7 .為Activity保留默認(rèn)狀態(tài),點(diǎn)擊Finish你的Android項(xiàng)目現(xiàn)在設(shè)置了默認(rèn)文件,準(zhǔn)備開始創(chuàng)建應(yīng)用吧。使用命令行工具創(chuàng)建Android項(xiàng)目如果你沒有使

7、用帶ADT插件的Eclipse,你也可以從命令行使用SDK工具來創(chuàng)建Android項(xiàng)目。1 .改變當(dāng)前路徑到AndroidSDK的tools目錄下。2 .執(zhí)行:androidlisttargets這將列出你的SDK已經(jīng)下載的Android平臺(tái),找到你想編譯應(yīng)用的平臺(tái),注意目標(biāo)ID。我們建議你選擇所允許的最高版本,雖然你可以構(gòu)建支持舊版本的應(yīng)用,但設(shè)定為最新版本可以為最新設(shè)備優(yōu)化你的應(yīng)用。如果你沒有看到任何目標(biāo)列表,你需要使用SDKManager安裝一些平臺(tái)。3 .執(zhí)行:androidcreateproject-target<target-id>-nameMyFirstApp-pat

8、h<path-to-workspace>/MyFirstApp-activityMainActivity-packagecom.example.myfirstapp用上面得到的目標(biāo)ID替換<target-id>,用你想保存Android項(xiàng)目的本地路徑替換<path-to-workspace>。運(yùn)行你的App如果你按照上一節(jié)課創(chuàng)建了Android項(xiàng)目,它包含了一個(gè)默認(rèn)的“HelloWorld”源文件,允許你立即運(yùn)行該應(yīng)用。如何運(yùn)行你的應(yīng)用依賴兩件事:你是否有一個(gè)真實(shí)的Android設(shè)備;你是否在使用Eclipseo本節(jié)將演示如何在一個(gè)真實(shí)的Android設(shè)備或

9、Android模擬器上安裝和運(yùn)行你的應(yīng)用,以及分別在兩種情況下運(yùn)行:Eclipse和命令行工具。在運(yùn)行你的應(yīng)用之前,我們應(yīng)該了解一些有關(guān)Android項(xiàng)目的目錄和文件。AndroidManifest.xml清單文件描述了應(yīng)用的基本特征并定義了它的每個(gè)組件,隨著課程的深入,你將了解這個(gè)文件中的各種定義。清單文件中最重要的元素之一是<uses-sdk>元素,它用android:minSdkVersiont和android:targetSdkVersion兩個(gè)屬性定義了你的應(yīng)用兼容不同的Android版本。在你的首個(gè)App中,它看起來類似這樣:<manifestxmlns:andr

10、oid="http:</manifest>你應(yīng)該把a(bǔ)ndroid:targetSdkVersion設(shè)置的盡可能高并在相應(yīng)的平臺(tái)上測(cè)試你的應(yīng)用。更多信息請(qǐng)參見“支持不同平臺(tái)版本src/應(yīng)用的主要源文件的存放目錄。默認(rèn)情況下,它包含一個(gè)當(dāng)通過應(yīng)用圖標(biāo)啟動(dòng)應(yīng)用時(shí)要運(yùn)行的Activity類。res/包含了幾個(gè)和應(yīng)用資源相關(guān)的子目錄,有這么幾個(gè):drawable-hdpi/存放為高分辨率屏幕設(shè)計(jì)的可繪制對(duì)象(如位圖)。其它以drawable開頭的目錄存放為其它分辨率設(shè)計(jì)的資源。layout/存放定義應(yīng)用的用戶界面的文件。values/存放包含其它資源集合的各種XML文件,如字符串和

11、顏色的定義。當(dāng)你構(gòu)建和運(yùn)行默認(rèn)Android應(yīng)用時(shí),默認(rèn)的Activity類會(huì)啟動(dòng)并加載布局文件顯示“HelloWorld",結(jié)果雖然平平淡淡,但重要的是,在你開發(fā)之前了解了如何運(yùn)行你的應(yīng)用。在真實(shí)設(shè)備上運(yùn)行如果你有一部真實(shí)的Android設(shè)備,下面將告訴你如何安裝和運(yùn)行你的應(yīng)用。1 .用USB連線連接你的設(shè)備和開發(fā)機(jī)器,如果你在Windows下開發(fā),你可能需要為你的設(shè)備安裝合適的USB驅(qū)動(dòng)程序。要獲得安裝驅(qū)動(dòng)程序的幫助,請(qǐng)參看OEMUSBDrivers文檔。2 .在你的設(shè)備上啟用USBdebugging大多數(shù)設(shè)備運(yùn)行Android3.2或更舊的版本,你可以在Settings>

12、Applications>DevelopmentT找至ij這個(gè)選項(xiàng)。在Android4.0或更新版本中,這個(gè)選項(xiàng)在Settings>Developeroptions中。注意:在Android4.2或更新版本中,Developeroptions默認(rèn)是隱藏的,要讓它可見,進(jìn)入Settings>Aboutphone并且輕觸Buildnumber七次,返回上一級(jí)屏幕就可以找至UDeveloperoptions從Eclipse中運(yùn)行:1 .打開的你項(xiàng)目中的一個(gè)文件,并在工具欄上點(diǎn)擊運(yùn)行2 .在Runas窗口中,選擇AndroidApplication然后點(diǎn)擊OKEclipse將把應(yīng)用安

13、裝到你連接的設(shè)備上并啟動(dòng)它。你也可以從命令行運(yùn)行你的應(yīng)用1 .把路徑改變到你的Android項(xiàng)目的根目錄中,執(zhí)行:antdebug2 .確保你的AndroidSDKplatform-tools/目錄在你的PATH環(huán)境變量中,執(zhí)行:adbinstallbin/MyFirstApp-debug.apk3 .在你的設(shè)備上找到MyFirstActivity并打開它。這就是如何構(gòu)建和在設(shè)備上運(yùn)行你的應(yīng)用,要進(jìn)入開發(fā),讓我們繼續(xù)下一節(jié)課。在模擬器上運(yùn)行無論你是使用Eclipse還是命令行,要在模擬器上運(yùn)行你的應(yīng)用,首先要?jiǎng)?chuàng)建一個(gè)Android虛擬設(shè)備(AVD)。一個(gè)AVD是Android模擬器的設(shè)備配置,

14、允許你模擬不能的設(shè)備。要?jiǎng)?chuàng)建AVD:1 .執(zhí)彳tAndroid虛擬設(shè)備管理工具_(dá)a.在Eclipse中,點(diǎn)擊工具欄的AndroidVirtualDeviceManager皿。b.在命令行中,把路徑改變到<sdk>/tools/并且執(zhí)行:androivavd2 .在Android虛擬設(shè)備管理工具中,點(diǎn)擊New。3 .填寫AVD的詳細(xì)信息,給它一個(gè)名字,目標(biāo)平臺(tái),SD卡的大小以及皮膚(默認(rèn)為HVGA)。4 .點(diǎn)擊CreateAVD。5 .在Android虛擬設(shè)備管理工具中選擇新的AVD,點(diǎn)擊Start。6.模擬器啟動(dòng)之后,解鎖模擬器的屏幕。從Eclipse中運(yùn)行:1.打開的你項(xiàng)目中的一

15、個(gè)文件,并在工具欄上點(diǎn)擊運(yùn)行Oo2.在Runas窗口中,選擇AndroidApplication然后點(diǎn)擊OKEclipse將把應(yīng)用安裝到模擬器上并啟動(dòng)它。你也可以從命令行運(yùn)行你的應(yīng)用6 .把路徑改變到你的Android項(xiàng)目的根目錄中,執(zhí)行:antdebug7 .確保你的AndroidSDKplatform-tools/目錄在你的PATH環(huán)境變量中,執(zhí)行:adbinstallbin/MyFirstApp-debug.apk8 .在模擬器中找到MyFirstActivity并打開它。這就是如何構(gòu)建和在設(shè)備上運(yùn)行你的應(yīng)用,要進(jìn)入開發(fā),讓我們繼續(xù)下一節(jié)課。創(chuàng)建簡單用戶界面Android應(yīng)用的圖形用戶界

16、面是由View和ViewGroup對(duì)象組成的層次結(jié)構(gòu)創(chuàng)建的。View對(duì)象通常是一個(gè)UI部件如button或textfield,ViewGroup對(duì)象是一個(gè)不可見的視圖容器,它定義了子視圖如何布局,如grid或verticallist。Android提供了一個(gè)XML詞匯表,對(duì)應(yīng)View和ViewGroup的子類,你可以在XML中使用UI元素的層次結(jié)構(gòu)定義自己的用戶界面。ViewGroup圖解ViewGroup對(duì)象如何在布局中組織分支以及包含其它View對(duì)象在這節(jié)課中,你將創(chuàng)建一個(gè)包含button和textfield的XML布局。在隨后的課程中,你將響應(yīng)按紐按下時(shí),把textfield中的內(nèi)容發(fā)送

17、到另一個(gè)Activityo創(chuàng)建線性布局從res/layout/目錄中打開activity_main.xml文件。注意:在Eclipse中,你打開一個(gè)布局文件時(shí),首先看到的是圖形布局編輯器。這是一個(gè)使用“所見即所得”工具幫助你創(chuàng)建布局的編輯器。在這節(jié)課中,你要直接處理XML,因此點(diǎn)擊屏幕下方的activity_main.xml標(biāo)簽T開XML編輯器。你在創(chuàng)建項(xiàng)目時(shí)選擇的BlankActivity模板包含了一個(gè)帶相對(duì)布局的根視圖和TextView的子視圖的activity_main.xml文件。首先,刪除<TextView>元素并把<RelativeLayout>元素改為&l

18、t;LinearLayout>,然后添加android:orientation屬性并把它的值設(shè)為"horizontal",結(jié)果看來如下所示:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http:xmlns:tools="http:android:layout_width="match_parent"android:layout_height="match_parent"

19、android:orientation="horizontal"></LinearLayout>LinearLayout是一個(gè)視圖組(ViewGroup的子類),它按照android:orientation指定的值在垂直或水平方向上排列子視圖。LinearLayout的每一個(gè)子視圖按照它在XML中的順序出現(xiàn)在屏幕上。另外兩個(gè)屬性,android:layout_width和android:layout_height用來為所有視圖指定大小。因?yàn)長inearLayout是布局的根視圖,它將填充整個(gè)屏幕區(qū)域,應(yīng)用的高度和寬度被設(shè)定為“match_parent&qu

20、ot;,這個(gè)值表示視圖將會(huì)擴(kuò)展它的寬度和高度以匹配父視圖的寬度和高度。要了解有關(guān)布局屬性的更多信息,請(qǐng)參見布局指南。添力口TextField要?jiǎng)?chuàng)建一個(gè)用戶可編輯的文本域,在<LinearLayout>中插入一個(gè)<EditText>元素。像每個(gè)View對(duì)象一樣,你必須定義某些XML屬性以指定EditText對(duì)象的屬性。下面是如何在<LinearLayout>內(nèi)部聲明EditText對(duì)象:<EditTextandroid:id="+id/edit_message"android:layout_width="wrap_conte

21、nt"android:layout_height="wrap_content"android:hint="string/edit_message"/>有關(guān)這些屬性:android:id它為視圖提供一個(gè)唯一標(biāo)識(shí)符,以便我們?cè)诖a中引用它,例如讀取或操作視圖對(duì)象(我們將下一節(jié)課中了解這些)。符號(hào)用來從XML文件中引用任何資源對(duì)象,它后面是資源類型(本例中是id類型),斜杠,然后是資源名稱(本例是edit_message)。資源類型前面的加號(hào)(+)只有在你首次定義資源ID時(shí)才需要它,當(dāng)應(yīng)用編譯時(shí),SDK工具會(huì)在項(xiàng)目的gen/R.java文件中使

22、用ID名稱創(chuàng)建一個(gè)新的資源ID以引用EditText元素,一旦通過這種方式聲明了資源ID,其它對(duì)這個(gè)ID的引用都不再需要加號(hào)。只有在指定新資源ID時(shí)才需要加號(hào),引用具體的資源,如字符串或布局,則不需要加號(hào),詳情請(qǐng)見關(guān)于資源對(duì)象。關(guān)于資源對(duì)象資源對(duì)象使用一個(gè)唯一整數(shù)和應(yīng)用的資源關(guān)聯(lián)起來,比如位圖、布局文件或字符串。每一個(gè)資源都在項(xiàng)目的gen/R.java文件中定義了一個(gè)對(duì)應(yīng)的資源對(duì)象。你可以使用類R中的對(duì)象名引用資源,例如當(dāng)你需要為android:hint屬性指定一個(gè)字符串值時(shí)。你也可以通過android:id屬性創(chuàng)建一個(gè)資源ID來和一個(gè)視圖關(guān)聯(lián)起來,這可以使你在代碼中引用這個(gè)視圖。每次編譯應(yīng)用

23、時(shí),SDK工具都會(huì)生成R.java文件,永遠(yuǎn)不要手動(dòng)修改這份文件。要獲取更多信息,請(qǐng)參考“提供資源”指南。android:layout_width和android:layout_height沒有使用特定大小的高度和寬度,而是用“wrap_content”做為寬高的值,意味著視圖大小會(huì)自動(dòng)匹配內(nèi)容。如果用“mtch_parent”代替,那么EditText元素將會(huì)填充整個(gè)屏幕,因?yàn)樗枰ヅ涓溉萜鱈inearLayout的大小。android:hint當(dāng)文本域的內(nèi)容為空時(shí)顯示的默認(rèn)字符串。使用“string/edit_message'來引用一個(gè)在單獨(dú)的文件中定義的字符串資源,而不是直接使

24、用硬編碼的字符串。因?yàn)檫@是引用具體的資源(不是定義標(biāo)識(shí)符),所以不需要加號(hào)。由于我們還沒有定義字符串,你將會(huì)看到一個(gè)編譯錯(cuò)誤。我們會(huì)在下一節(jié)通過定義字符串來修正它。注意:這個(gè)字符串資源和元素ID同名:edit_message,因?yàn)橐觅Y源受資源類型(如id或string)限制,所以使用相同名稱不會(huì)產(chǎn)生沖突。添加字符串資源當(dāng)你需要在用戶界面中添加文本時(shí),你應(yīng)該為每個(gè)字符串指定一個(gè)資源。字符串資源允許你在一個(gè)地方管理所有的UI文本,方便我們查找和更新文本。外部化字符串還能在你本地化應(yīng)用以支持不同的語言時(shí),為你提供可替換的字符串。默認(rèn)情況下,你的Android項(xiàng)目包含了一個(gè)字符串資源文件:res/v

25、alues/strings.xml。我們?cè)谖募刑砑右粋€(gè)新字符串edit_message,把它的值設(shè)為"Enteramessage"(你可以刪除“HelloWorld”字符串)。在這份文件中,我們?cè)贋楹竺嬉砑拥陌醇~加一個(gè)字符串"Send”,取名為button_send”。最終的string.xml如下所示:<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="app_name">MyFirstApp&l

26、t;/string><stringname="edit_message">Enteramessage</string><stringname="button_send">Send</string><stringname="action_settings">Settings</string><stringname="title_activity_main">MainActivity</string></reso

27、urces>要獲得本地化應(yīng)用以支持其它語言的相關(guān)信息,參看支持不同設(shè)備課程。添加Button現(xiàn)在在布局中添加一個(gè)<Button>,緊隨在<EditText>元素之后。<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="string/button_send"/>因?yàn)楦邔捴翟O(shè)置為Wrap_content”,按紐的大小將會(huì)自動(dòng)匹配按紐文本。這個(gè)按紐不需要android:

28、id屬性,因?yàn)榇a中沒有引用它。讓輸入框填充整個(gè)屏幕寬度當(dāng)前的布局把EditText和Button都設(shè)計(jì)為自動(dòng)匹配內(nèi)容大小,如下圖所示:EnteramessageSend這對(duì)按紐沒問題,但對(duì)文本域就有點(diǎn)不太合適。因?yàn)橛脩艨赡軙?huì)輸入比較長的內(nèi)容,最好能讓文本域填充屏幕上剩余的空間。你可以通過使用android:layout_weight來指定LinearLayout中的weight屬性做到這一點(diǎn)。weight的值是一個(gè)數(shù)字,它指定了視圖使用屏幕剩余空間的數(shù)量,這個(gè)數(shù)量是相對(duì)于其它同級(jí)視圖使用的數(shù)量。這有點(diǎn)象飲料配方:2份伏特加,1份咖啡甜酒,意思是一份飲料中,伏特加占了三分之二。例如,你指定一個(gè)

29、視圖的weight是2,另一個(gè)視圖的weight是1,總和是3,那么第一個(gè)視圖將填充剩余空間的三分之二,第二個(gè)視圖填充余下的部分。如果再添加第三個(gè)視圖并且weight的值為1,那么第一個(gè)視圖(weight值為2的那個(gè))將獲得剩余空間的一半,另外兩個(gè)視圖每個(gè)獲得1/4。任何視圖weight的默認(rèn)值都是0,所以如果你只為一個(gè)視圖的weight值指定大于0的數(shù),那么這個(gè)視圖將填充屏幕上去掉其它視圖所占空間后的剩余空間。因此,要讓EditText填充屏幕上的剩余空間,我們只需把它的weight值設(shè)為1并且不去修改Button的weight值。<EditTextandroid:layout_wei

30、ght="1"./>當(dāng)指定了weight的值之后,為了提高布局性能,你應(yīng)該把EditText的width值改為零(0dp)。把寬度設(shè)為0dp有助于改善布局性能,因?yàn)樵O(shè)為“wrap_content",系統(tǒng)需要計(jì)算所需寬度,而設(shè)定了weight的值后,這種計(jì)算是沒有意義的,系統(tǒng)最終要根據(jù)其它視圖的寬度來計(jì)算剩余空間的寬度。下圖為重新分配了weight值之后的效果:EnteramessageSend以下是完成后的布局文件:<?xmlversion="1.0"encoding="utf-8"?><Linear

31、Layoutxmlns:android="http:<EditTextandroid:id="+id/edit_message"android:layout_weight="1"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="string/edit_message"/><Buttonandroid:layout_width="wrap_content&qu

32、ot;android:layout_height="wrap_content"android:text="string/button_send"/></LinearLayout>當(dāng)你創(chuàng)建項(xiàng)目時(shí),SDK工具就把這個(gè)布局應(yīng)用到默認(rèn)的Activity類了,因此你可以運(yùn)行應(yīng)用察看結(jié)果:1 .在Eclipse中,從工具欄中點(diǎn)擊RunG。2 .在命令行中,把路徑改變到Android項(xiàng)目的根目標(biāo)中并執(zhí)行:antdebugadbinstallbin/MyFirstApp-debug.apk繼續(xù)下一節(jié)課,學(xué)習(xí)如何響應(yīng)按紐按下,從文本域從讀取內(nèi)容,啟動(dòng)另一

33、個(gè)Activity等更多內(nèi)容。啟動(dòng)另一個(gè)Activity完成了上一節(jié)課的內(nèi)容后,你已經(jīng)有了一個(gè)可以顯示包含文本域和按紐的單個(gè)Activity的應(yīng)用。在這節(jié)課中,你將向MainActivity中添加一些代碼,使用戶點(diǎn)擊“發(fā)送按紐時(shí)啟動(dòng)一個(gè)新的Activity。響應(yīng)“發(fā)送”按紐要響應(yīng)按紐的點(diǎn)擊事件,打開activity_main.xml布局文件,并向<Button>元素添加android:onClick屬性。<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_co

34、ntent"android:text="string/button_send"android:onClick="sendMessage"/>android:onClick屬性的值"sendMessage'當(dāng)用戶點(diǎn)擊按紐時(shí),系統(tǒng)調(diào)用的Activity類中的方法名稱。打開MainActivity類(在項(xiàng)目的src/目錄下),添加相應(yīng)的方法:/*CalledwhentheuserclickstheSendbutton*/publicvoidsendMessage(Viewview)/Dosomethinginresponset

35、obutton這需要你導(dǎo)入View類:importandroid.view.View;提示:在Eclipse中,按Ctrl+Shift+O導(dǎo)入缺少的類(在Mac中按Cmd+Shift+O)。要讓系統(tǒng)匹配在android:onClick屬性中指定的方法名,方法簽名必須如下所示,具體地說,方法必須:1 .是public的2 .沒有返回值3 .僅有一個(gè)View類型的參數(shù)(表示被點(diǎn)擊的View對(duì)象)下一步,我們要完成這個(gè)方法以讀取文本域的內(nèi)容并把它傳遞到另一個(gè)Activity中。創(chuàng)建IntentIntent是一個(gè)提供運(yùn)行時(shí)綁定兩個(gè)獨(dú)立組件(例如兩個(gè)Activity)的對(duì)象。Intent表示應(yīng)用“想要做

36、點(diǎn)什么",你可以用它來完成各種任務(wù),但最常用的是用來啟動(dòng)另一個(gè)Activityo在sendMessage()方法中,創(chuàng)建一個(gè)Intent對(duì)象啟動(dòng)Activity被稱為DisplayMessageActivity。Intentintent=newIntent(this,DisplayMessageActivity.class);這里使用的構(gòu)造函數(shù)接受兩個(gè)參數(shù):第一個(gè)參數(shù)是一個(gè)Context對(duì)象(這里使用了this,因?yàn)锳ctivity類是Context類的子類)。系統(tǒng)要傳遞給Intent對(duì)象的應(yīng)用組件的類(本例中,DisplayMessageActivity引用的Activity將被啟

37、動(dòng))。注意:如果你使用Eclipse這樣的IDE,DisplayMessageActivity將引發(fā)一個(gè)錯(cuò)誤,因?yàn)轭愡€不存在。目前先忽略這個(gè)錯(cuò)誤,我們馬上就會(huì)創(chuàng)建這個(gè)類。Intent對(duì)象不僅可以啟動(dòng)另一個(gè)Activity,還能將數(shù)據(jù)打包傳送到Activityo對(duì)sendMessage()方法中,使用findViewById()獲取EditText元素并把它的文本值添加到Intent對(duì)象中。Intentintent=newIntent(this,DisplayMessageActivity.class);EditTexteditText=(EditText)findViewById(R.id.e

38、dit_message);Stringmessage=editText.getText().toString();intent.putExtra(EXTRA_MESSAGE,message);注意:你現(xiàn)在要導(dǎo)入android.content.Intent和android.widget.EditText這兩個(gè)類,還要定義EXTRA_MESSAG常數(shù)。Intent可以使用鍵值對(duì)的方式攜帶各種數(shù)據(jù)類型的,這個(gè)數(shù)據(jù)集合被稱為“extras”,putExtra()方法的第一個(gè)參數(shù)是鍵,第二個(gè)參數(shù)是值。為了在下一個(gè)Activity中查詢extra集合的數(shù)據(jù),你應(yīng)該定義一個(gè)公用的常數(shù)來表示extra中的鍵,

39、因此我們?cè)贛ainActivity類的頂部增加一個(gè)EXTRA_MESSAG的聲明。publicclassMainActivityextendsActivitypublicfinalstaticStringEXTRA_MESSAGE="com.example.myfirstapp.MESSAGE".使用應(yīng)用的包名做前綴來定義你的Intent對(duì)象的extra鍵是一個(gè)好的習(xí)慣,這可以確保在你的應(yīng)用要和其它應(yīng)用交互時(shí),這個(gè)鍵是唯一的。啟動(dòng)第二個(gè)Activity要啟動(dòng)一個(gè)Activity,調(diào)用startActivity()方法并把Intent對(duì)象傳遞給它。系統(tǒng)將接受到調(diào)用并啟動(dòng)Int

40、ent對(duì)象中指定的Activity的實(shí)例。用這些新代碼完成sendMessage()方法,現(xiàn)在它看上去應(yīng)該是這樣:publicvoidsendMessage(Viewview)Intentintent=newIntent(this,DisplayMessageActivity.class);EditTexteditText=(EditText)findViewById(R.id.edit_message);Stringmessage=editText.getText().toString();intent.putExtra(EXTRA_MESSAGE,message);startActivit

41、y(intent);現(xiàn)在你需要?jiǎng)?chuàng)建DisplayMessageActivity類了。創(chuàng)建第二個(gè)Activity用Eclipse創(chuàng)建新的Activity:1 .點(diǎn)擊工具欄上的Newr3o2 .在接下來的窗口中,打開Android文件夾,選擇AndroidActivity,點(diǎn)擊Next。3 .選擇BlankActivity,點(diǎn)擊Next。4 .填寫Activity詳細(xì)信息:Project:MyFirstAppActivityName:DisplayMessageActivityLayoutName:activity_display_messageTitle:MyMessageHierarchial

42、Parent:com.example.myfirstapp.MainActivityNavigationType:None點(diǎn)擊FinishoEclipse中的新Activity向?qū)绻阏谑褂闷渌麵DE和命令行工具,到項(xiàng)目的src/目錄中創(chuàng)建一個(gè)新文件命名為DisplayMessageActivity.java。打開DisplayMessageActivity.java文件,如果你是用Eclipse創(chuàng)建的這個(gè)Activity:類已經(jīng)包含了onCreate()方法的實(shí)現(xiàn)這里還包含了一個(gè)onCreateOptionsMenu()方法的實(shí)現(xiàn),但是在這個(gè)應(yīng)用中不需a”Up它,你可以刪除它。這里還包含

43、了一個(gè)onOptionsItemSelected()方法的實(shí)現(xiàn),它用來處理操作欄中的行為,保留它。因?yàn)锳ctionBarAPI僅在HONEYCOMB(API級(jí)另1J11)或更高版本中支持,你需要在getActionBar()方法外面添加一個(gè)條件語句來檢查當(dāng)前平臺(tái)版本。附帶地,你還必須在onCreate()方法前添加SuppressLint(NewApi")標(biāo)記,以避免Lint錯(cuò)誤。DisplayMessageActivity類看起來如下所示:publicclassDisplayMessageActivityextendsActivitySuppressLint("NewAp

44、i")OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_display_message);/Makesurewe'rerunningonHoneycomborhighertouseActionBarAPIsif(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)/ShowtheUpbuttonintheactionbar.

45、getActionBar().setDisplayHomeAsUpEnabled(true);OverridepublicbooleanonOptionsItemSelected(MenuItemitem)switch(item.getItemId()caseandroid.R.id.home:NavUtils.navigateUpFromSameTask(this);returntrue;returnsuper.onOptionsItemSelected(item);如果你使用了Eclipse以外的IDE,用上面的代碼更新你的DisplayMessageActivity類。Activity的

46、任何子類都必須實(shí)現(xiàn)onCreate()方法。當(dāng)創(chuàng)建Activity新實(shí)例時(shí)由系統(tǒng)調(diào)用這個(gè)方法。你必須這個(gè)方法中用setContentView()聲明Activity布局,并對(duì)Activity組件進(jìn)行初始化。注意:如果你使用Eclipse之外的IDE,你的項(xiàng)目中不會(huì)包含setContentView()方法所需的activity_display_message布局文件,這沒關(guān)系,稍后你將更新onCreate()方法,不會(huì)用到那個(gè)布局文件。添加標(biāo)題字符串如果你使用的是Eclipse,你可以跳到下一小節(jié),因?yàn)镋clipse已經(jīng)自動(dòng)為新Activity提供了標(biāo)題字符串。如果你使用的是Eclipse之外的

47、IDE,在strings.xml文件中為新Activity添加標(biāo)題字符串。<resources>.<stringname="title_activity_display_message">MyMessage</string>/resources添加到清單文件中所有的Activity都必須在清單文件AndroidMainfest.xml中用Activity元素聲明。當(dāng)你使用Eclipse工具創(chuàng)建Activity時(shí),它會(huì)創(chuàng)建默認(rèn)的條目。如果你使用的是其它IDE,你需要手動(dòng)在清單文件中添加條目,它看來如下所示:<application.>.<activityandroid:name="com.example.myfirstapp.DisplayMessageActivity"android:label="string/title_activity_display_message"android:parentActivityName="com.examp

溫馨提示

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

評(píng)論

0/150

提交評(píng)論