版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、andbook - Android 編程Android編程由 提供1Android編程附帶(本文來自 -Commu學(xué)習(xí)交流)原文屬于Nicolas Gramlich 撰寫譯在檢查最新版本由 提供2Download at Pin5i.Comandbook - Android 編程目錄序言/如何閱讀本文 什么是 Android -一款 GPhone?俯瞰 Android5678開放性所有應(yīng)用程序都是平等地創(chuàng)建9打破應(yīng)用程序局限9快速 & 簡(jiǎn)單的應(yīng)用程序開發(fā)9第一周128Dalvik.equals(Java)=false13與普
2、通 Java 虛擬機(jī)的差異13Android Code Challenge14創(chuàng)建 Android 應(yīng)用程序15剖析一個(gè) Android 應(yīng)用程序15Activity15Intent Receiver17Service17Content Provider18Android 用戶界面19屏幕元素層次19Android UI 元素與 Swing UI 元素比較22AndroidManifest.xml 文件23的24<ma nifest><uses-permission> <permission> <instrumentation> 25252525
3、<applica tion>25由 提供3<meta-data><receiver><service>272727<provider>28資源和魔幻的 R.java 文件29資源29資源列表29在代碼中使用資源30參考資源31可選資源和局部化32333435魔幻的 R.javaHello World -Andoird 方式安裝 Android SDKAndroid 開發(fā)工具(ADT)35安裝完畢,我們來寫點(diǎn)代碼37創(chuàng)建一個(gè)新 Android 項(xiàng)目37運(yùn)行你第一個(gè)應(yīng)用程序37UI-Java 方式45System.o
4、ut.println()?46LogCat46使用 Intent49啟動(dòng)(子)Activity49在 Java 代碼中找到 XML 定義的 View52為 View 處理點(diǎn)擊53從子 Activity 返回?cái)?shù)值56給(子)Activity 傳遞數(shù)據(jù)46重要的 Layout 和ViewGroup60RelativeLayout60由 提供4Download at Pin5i.Comandbook - Android 編程參考書目61缺失章節(jié)6262社區(qū)由 提供5序言/如何閱讀本文本文為以前已經(jīng)使用 Java 編程并想開始為 Android 平臺(tái)開發(fā)的開
5、發(fā)者編寫。我試著盡可能地多的"展開",在合適的每個(gè)地方放上示例代碼。我也試著盡可能多的很多圖片,因?yàn)樗鼈兛梢曰钴S學(xué)習(xí)過程和吸引讀者眼球。但不慶幸的,不是每樣都編上代碼;你不得不學(xué)習(xí)一些Android 平臺(tái)基礎(chǔ)原理來完全理解它。那就是在第一頁(yè)中描述的。沒有必要通讀所有的那些描述頁(yè),但那樣較好些。你可以把它當(dāng)成一種參考。當(dāng)在"展開"-過程期間你應(yīng)該讀也被說明了。因此你可以直接從 Hello World-Android 方式開始。所有你在本文(所有工作空間)中看到的代碼可以在以下站點(diǎn)獲得:閱讀愉快!由 提供6Download at Pin
6、5i.Comandbook - Android 編程2007 年 11 月 12 日,開放聯(lián)盟(Open Handset Alliance 1 )發(fā)布 Google Android SDK,一周前已經(jīng)宣布。沖擊力是難以置信的,幾乎每個(gè) IT/編程相關(guān)的報(bào)紙放出關(guān)于 Android SDK發(fā)布的消息-在這一兩天內(nèi),Google 組織就以超過 2000 消息而群雄。Android 平臺(tái)的思想是并且一直是一個(gè)和一門每天引越來越多的開發(fā)者的課程。尤其是基于 Inten 和甚至可以替換主頁(yè)面應(yīng)用程序開源的架構(gòu),該架構(gòu)正真給予整個(gè)平臺(tái)很大數(shù)量的靈活性。"Android無限想象"1 Ni
7、colas Gramlich --管理員由 提供7什么是Android-一款 GPhone?在 Google 發(fā)布 Android SDK 之前的幾周和幾月就有關(guān)于一個(gè)叫 GPhone 的許多傳言。它被說一種由 Google 生產(chǎn)并通過向該用戶展示敏感-背景廣告方式提供通信的移動(dòng)。圖 1 可能的 GPhone但是到 2007 年 11 月 5 日 Andy Rubin 2 宣布:"A nroid平臺(tái)更有深意.",而不是一個(gè)單純的開放聯(lián)盟成員 Google 為移動(dòng)發(fā)布一套完整的:一個(gè)操作系統(tǒng)、中間件和移動(dòng)應(yīng)用。一周前發(fā)布的不是一個(gè)最終
8、,而是一個(gè)很多地方都沒實(shí)現(xiàn)的"預(yù)覽 SDK"。那些主要的站點(diǎn)抓取一些說 Android 平臺(tái)漏洞并嚴(yán)重丟失文檔的開發(fā)者的不適。但主要是說 Android 在該領(lǐng)域上比任何一個(gè)別的小。2 Andy Rubin -Google 移動(dòng)平臺(tái)主管由 提供8Download at Pin5i.Comandbook - Android 編程俯瞰Android讓我們開一下 OHA 在他的 Android 平臺(tái)上強(qiáng)調(diào)的:開放性"A ndroid 從底層被構(gòu)建,使開發(fā)者可以創(chuàng)造引人注意的應(yīng)用程序充分利用所有的付費(fèi),它被建正真的開放。例如,一個(gè)應(yīng)用程序可以調(diào)用任何
9、一個(gè)的功能,例如打、或是使用照相機(jī),它開發(fā)者為用戶創(chuàng)建豐富并身臨其境的體驗(yàn)。"這是真的,作為一個(gè)開發(fā)者你可以做每樣事情,從只需 2 行代碼,甚至替換你的主屏幕。你可以幾周內(nèi)容易地創(chuàng)建完整定制的操作系統(tǒng),不再提供預(yù)置的 Google 應(yīng)用程序給用戶。"A ndroid 基于開源的 Linux 內(nèi)核構(gòu)建。此外,它利用一個(gè)定制的虛擬機(jī),這個(gè)虛擬機(jī)專門設(shè)計(jì)來使在環(huán)境中的內(nèi)存和硬件資源更完善。Android 會(huì)是開源的;它可以不受限制地?cái)U(kuò)展來融合新的技術(shù)(可移植的、可嵌入的,當(dāng)這些技術(shù)出現(xiàn)時(shí))。這個(gè)平臺(tái)將會(huì)繼續(xù)促進(jìn)開發(fā)者社區(qū)協(xié)同工作來創(chuàng)建創(chuàng)新的應(yīng)用程序。"這里 Google
10、 談到了一個(gè)名叫 Dalvik 的虛擬機(jī)(Dalvik VM),它是一個(gè)基于寄存器的虛擬機(jī),由 Dan Bornstein 和其他 Google 工程師設(shè)計(jì)編寫,是 Android 平臺(tái)的一個(gè)重要部分。在"基于寄存器"處,我們發(fā)現(xiàn)了第一個(gè)和普通 Java 虛擬機(jī)(基于堆棧)的不同點(diǎn)。參看"Da lvik.equals(Ja va)=false" 章節(jié)來獲取個(gè)討論的細(xì)節(jié)。關(guān)于這由 提供9所有應(yīng)用程序都是平等地創(chuàng)建打破應(yīng)用程序局限"A ndroid 打破創(chuàng)建新的、創(chuàng)新的應(yīng)用程序的局限。例如:開發(fā)者可以讓個(gè)人上的數(shù)據(jù)和上的數(shù)據(jù)連
11、接-如用戶的人、日歷、地理位置-提供了一個(gè)更有意義的用戶體驗(yàn)。開發(fā)者可以創(chuàng)建一個(gè)應(yīng)用程序,這個(gè)程序可以使用戶看到他們朋友位置和改變后位置,當(dāng)他們?cè)诟浇鼤r(shí)可以有機(jī)會(huì)和他們。"快速&簡(jiǎn)單的應(yīng)用程序開發(fā)"A ndroid 提供了寬范圍的有用類庫(kù)和工具,用這些可以創(chuàng)建豐富的應(yīng)用程序,例如 Android 使開發(fā)者可以獲得的地理位置,并通過同類對(duì)同類的一套完整的工具,這些工方式的社交程序和其他通信。另外,Android具提供開發(fā)者高度的生產(chǎn)力和深度探究他們的應(yīng)用程序。"由 提供10Download at Pin5i.Comandbook - A
12、ndroid 編程自從 Web2.0,這讓內(nèi)容豐富的應(yīng)用程序頃刻間不再是幻想。Android 帶來了未知的開發(fā)速度。讓我舉個(gè)例子:一天,我在 Android 文檔中的"Dr ivingDirect ions" 這個(gè)時(shí)髦詞匯處困惑。構(gòu)思完成圖 2Google 駕駛導(dǎo)航儀在 Android 上完成!(上圖中這個(gè)程序的開發(fā)過程花了一個(gè)簡(jiǎn)單的用戶界面和所有你看到的圖像). 你能否在其他平臺(tái)上創(chuàng)建一個(gè)如此家喻戶曉的經(jīng)典程序?-不 。由 提供11額外,用幾行代碼這個(gè)程序就能夠使用當(dāng)前流行的 GPS-定位來豐富。Google 強(qiáng)調(diào) Android 支持基礎(chǔ)定位服務(wù)的
13、能力。Android 中的 Google Map 如此整潔,就好像是專為 Android 開發(fā)的一樣。通過添加 3 行 Android 默認(rèn)應(yīng)用的 Java 代碼和 3 行 XML 代碼,你就可以綜合一個(gè)完整的放大和拖拽地圖的能力。在 Android 中別的易用的特性是動(dòng)畫和媒體回放。從m5 版本,Android SDK就包含了連續(xù)和背面的 GeoCoding 和 mp3 添入,支持:ogg-Vorbis ,MIDI 和一些其他格式的回放。由 提供12Download at Pin5i.Comandbook - Android 編程第一周不走運(yùn),開發(fā)者不得不處理一個(gè)整實(shí)現(xiàn)
14、的預(yù)覽 SDK(初始發(fā)布:"m3-rc20") ,里面甚至一些 SDK 關(guān)鍵部分被證實(shí)是整的。文檔缺失導(dǎo)致 Google 開發(fā)組中出現(xiàn)一個(gè) Android 開發(fā)者組織。遲早,你不得不重視來自 Google 的:"如果它沒有被證實(shí),就不意味著他可用"許多開發(fā)者不了解第一個(gè)發(fā)布的 SDK 是預(yù)覽或是開發(fā)者預(yù)覽這個(gè)事實(shí),改變了的 API 要得等到。其他讓人厭的漏洞是模擬器聲音突變,這個(gè)漏洞說是在四周后"m3-r37a"發(fā)布中解決,但還是在一些 m5 安裝中出現(xiàn)了。由 提供13Dalvik.equals(Java)=fa
15、lse為什么叫"Da lvik"?-Dalvik 虛擬機(jī)由 Bornstein 命名,在 Eyjaf j ör ður (冰島)漁村后面的 Dal ví k,他祖先的地方。正如你可能聽說的一樣,Dalvik 是 Android 虛擬機(jī)的名稱。它是一個(gè)執(zhí)行Dalvik 可執(zhí)行格式(*.dex)文件的只直譯程序虛擬機(jī),這種.dex 格式使高效和內(nèi)存執(zhí)行更完善。Dalvik 虛擬機(jī)基于寄存器,并能運(yùn)行被 java 編譯器編譯過的 class ,這個(gè) class 已經(jīng)被包含的"d x"工具轉(zhuǎn)換成 Dalvik的格式了。這個(gè)虛擬機(jī)運(yùn)行
16、在 Linux2.6 內(nèi)核上,虛擬機(jī)依靠它來獲得底層服務(wù)(例如線程管理和底級(jí)內(nèi)存管理)。Dalvik 虛擬機(jī)也被優(yōu)化在多個(gè)實(shí)例中以很低的內(nèi)存空間運(yùn)行。各自的虛擬機(jī)保護(hù)它的應(yīng)用程序不被其他破壞程序阻礙。與普通 Java 虛擬機(jī)的差異現(xiàn)在,幾乎在任何一個(gè)桌面計(jì)算機(jī)上都可以找到的 Java 虛擬機(jī)是基于堆棧的虛擬機(jī)(VM)。另一方面,DalvikVM 是基于寄存器,由于處理器為基于寄存器執(zhí)行而被優(yōu)化?;诩拇嫫鞯?VM 在程序代價(jià)上也更快速的執(zhí)行時(shí)間,哪些程序在編譯后會(huì)更大。由 提供14Download at Pin5i.Comandbook - Android 編程Andro
17、id 代碼競(jìng)賽Android Code Challenge(ADC) 是 Google 為了鼓勵(lì)社區(qū)為 Android 平臺(tái)創(chuàng)建超酷的應(yīng)用程序的一個(gè)策略,通過獎(jiǎng)勵(lì)提交的前 50 名最有前途的應(yīng)用程序方式進(jìn)行競(jìng)賽。圖 3 Android 開發(fā)者競(jìng)賽 Logo當(dāng)然,Android 開發(fā)者競(jìng)賽-有總共 100,000,000 美金作為獎(jiǎng)勵(lì)金額,吸引了的開發(fā)者來創(chuàng)建一系列的正真有用的應(yīng)用程序。另一邊,在 SDK 發(fā)布的第一個(gè)重要月份中,許多聲音表示,選擇 Google 不是一個(gè)主意,因?yàn)樗鼤?huì)導(dǎo)致少量的代碼共享,由于許多人害怕和社區(qū)共享他們的主意。有兩個(gè)競(jìng)賽計(jì)劃:Android 開發(fā)者競(jìng)賽 I:截止到
18、2008 八月 14 日。Android 開發(fā)者來臨時(shí)啟動(dòng)。競(jìng)賽 II:這部分將在 2008 第二季中期首款基于 AndroidAndroid 開發(fā)者競(jìng)賽 I 中,到八月 14 日前提交的 50 個(gè)最有前途的將會(huì)被授予 25,000 美金獎(jiǎng)勵(lì)來做后期開發(fā)。這些被選中的若接下來符合主要認(rèn)證鑒定并通過,有 10 個(gè) 257,000 金額的獎(jiǎng)勵(lì)和 10 個(gè) 100,000 金額的獎(jiǎng)勵(lì)。提交到競(jìng)賽的應(yīng)用程序應(yīng)該是創(chuàng)新和證明了 Android 平臺(tái)功能的,像基礎(chǔ)定位服務(wù),媒體消費(fèi),游戲和社交網(wǎng)絡(luò)等豐富體驗(yàn)的。由 提供15創(chuàng)建Android 應(yīng)用程序本章節(jié)我們特別集中在創(chuàng)建 Andr
19、oid 應(yīng)用程序。Android 應(yīng)用程序剖析對(duì)于一個(gè) Android 應(yīng)用程序有四種部分ActivityIntent Receiver ServiceContent Provider不是每一個(gè)的應(yīng)用程序都需要所有這四個(gè)部分,但是你的應(yīng)用程序?qū)?huì)用這些的組合來編寫。一旦你決定了你應(yīng)用程序需要哪些組件,你應(yīng)該在一個(gè)名叫 Android Manifest.xml文件中列出它們。這是一個(gè) XML 文件,在里面你應(yīng)用程序組件和它們的功能和需求是什么。馬上討論,Android Manifest.xml 負(fù)責(zé)什么作用。ActivityActivity 是 Android 四個(gè)構(gòu)建模塊中最普通的一個(gè)。一個(gè)
20、Acitivity 通常在你應(yīng)用是一個(gè)單獨(dú)的屏幕。每一個(gè) Activity 是被實(shí)現(xiàn)作為一個(gè)繼承于 Activity 基類的單獨(dú)的類。你的 Class 將要顯示一個(gè)由 View 和響應(yīng)組成的用戶界面。多數(shù)應(yīng)用程序由多個(gè)屏幕組成。例如:一個(gè)文本消息發(fā)送程序可能有一個(gè)顯示要發(fā)送的人列表的屏幕,有一個(gè)給選中的人編輯的屏幕,并且另外的屏幕顯示以前或是更改設(shè)置。每一個(gè)這些屏幕應(yīng)該作為一個(gè)Activity 被實(shí)現(xiàn)。移動(dòng)到另外的屏幕上是通過啟動(dòng)一個(gè)新的 Activity 來完成。由于一些 ,一個(gè) Activity 可能會(huì)向先前的 Activity 返回一個(gè)值例如:一個(gè)讓用戶選擇一個(gè) Photo 的 Acti
21、vity 將會(huì)返回選中的 photo 到 caller 應(yīng)用程序上。由 提供16Download at Pin5i.Comandbook - Android 編程當(dāng)一個(gè)新的屏幕開啟,先前的屏幕被暫停并且壓入歷史堆棧。用戶可以向后導(dǎo)航返回到在歷史中先前打開的屏幕。當(dāng)它們遺留不適當(dāng)時(shí),屏幕也可以選擇從歷史堆棧中刪除。Andriod 為每一個(gè)從 Home 屏幕上運(yùn)行的每一個(gè)應(yīng)用程序保留歷史堆棧。Intent 和 Intent FilterAndroid 使用一個(gè)名叫 Intent 的特殊類來讓應(yīng)用程序從一個(gè)屏幕移動(dòng)到另一個(gè)屏幕。Intent 描述了一個(gè)應(yīng)用程序想要干什么。Int
22、ent 數(shù)據(jù)結(jié)構(gòu)的兩個(gè)最重要的部分是:要響應(yīng)的 action 和data。典型的 action 值是M AIN( 應(yīng)用程序的),VIEW、PICK、EDIT,等等。Data 表示成一個(gè)統(tǒng)一資源定界符(URI).例如:要在瀏覽器中查看一個(gè),你將創(chuàng)建一個(gè)帶有 VIEW action 的 Intent 和設(shè)置了data。URI 的有一個(gè)名叫 IntentFilter 的相關(guān)類。當(dāng)一個(gè) Intent 是一個(gè)有效地請(qǐng)求來做什么事, 一個(gè) IntentFilter 是:一個(gè) Activity(或 Intent receiver,參見下面)能夠處理什么樣的 Intent 的描述。一個(gè)為個(gè)人設(shè)計(jì)的有能力顯示人
23、的 Activity 應(yīng)該發(fā)布一個(gè)當(dāng)申請(qǐng)表示一個(gè)人的數(shù)據(jù)時(shí),可以說是知道如何處理 action View 的IntentFilter。Activity 在 Android Manifest.xml 文件中發(fā)布它們的 IntentFilter。從一個(gè)屏幕到另一個(gè)屏幕的導(dǎo)航通過解決 Intent 來完成。要向前導(dǎo)航,一個(gè)Activity 調(diào)用 startActivity(myInte)。系統(tǒng)接下來查找所有應(yīng)用程序的 IntentFilter 并選取一個(gè) IntentFilter 最適合 myIntent 的 Activity。新的 Activity 被這個(gè)讓它運(yùn)行的 Intent 通知,解決 In
24、tent 的過程發(fā)生在運(yùn)行時(shí)候,即當(dāng) startActivity()被調(diào)用時(shí)。startActivity()提供了兩個(gè)關(guān)鍵益處:Activity 可以從其他組件上簡(jiǎn)單地通過以一個(gè) Intent 格式做請(qǐng)求來重用功能Activity 可以在任何時(shí)候被一個(gè)新的帶有相等的 IntentFilter 的 Activity 替換由 提供17Intent Receiver當(dāng)你想要在你的應(yīng)用IntentReceiver。例如:當(dāng)編碼來執(zhí)行對(duì)外部的響應(yīng),你可以使用一個(gè)響鈴,或當(dāng)數(shù)據(jù)網(wǎng)絡(luò)可用時(shí),或當(dāng)午夜時(shí)。雖然IntentReceiver 不顯示一個(gè) UI,但它們也許會(huì)顯示一個(gè)通知來提醒用
25、戶是否有令的發(fā)生。IntentReceiver 也是在 Android Manifest.xml 中被人感,但你也可以在代碼中使用"Context.register Receiver()"來它們。它的IntentReceiver 被調(diào)用時(shí),你的程序不是非得運(yùn)行的;假如必要時(shí),當(dāng)一個(gè)IntentReceiver 被觸發(fā)時(shí),系統(tǒng)將會(huì)調(diào)用你的應(yīng)用程序。通過使用"Context.broadcastIntent()",應(yīng)用程序也能發(fā)送它們的應(yīng)用程序。的"I ntent Broadcast"給別Service一個(gè) service 是長(zhǎng)期存活并且運(yùn)
26、行時(shí)不帶 UI 的編碼。這個(gè) Service 的好例子是Media Player 從一個(gè)列表中歌曲。在一個(gè) Media Player 應(yīng)用,可歌曲。能有一個(gè)或的 Activity,這些 Activity用戶選擇歌曲和開始,音樂回放本身不應(yīng)該被一個(gè) Activity 處理,因?yàn)橛脩魧⑵谕趯?dǎo)航到一個(gè)新的屏幕后音樂保持。這種情況中,Media Player Activity 應(yīng)該使用"Context.startServer()" 來啟動(dòng)一個(gè)服務(wù)在運(yùn)行來保持音樂繼續(xù)。接下來系統(tǒng)將保持音樂回放 Service 運(yùn)行,直到這個(gè) Service 被停止。(通過閱讀 Android應(yīng)用程
27、序生命周期,你可以學(xué)到關(guān)于先前給出的系統(tǒng)中的 Service 。的。)記住,你可以使用"Context.bindSer ver()"來連接一個(gè) Service (如果還沒有運(yùn)行,并開啟它)。當(dāng)連接到一個(gè) Service ,你可以通過一個(gè) Service 顯露出來的Interface 來和它通信。對(duì)于音樂 Service ,這可能你暫停、倒回,等等。Content Provider應(yīng)用程序可以把他們的數(shù)據(jù) 到文件中,一個(gè) SQLite 數(shù)據(jù)庫(kù)中,設(shè)置中,或是任何其他的有意義結(jié)構(gòu)中。如果你想要你的應(yīng)用程序的數(shù)據(jù)和其他應(yīng)用程序共享,一個(gè) Content Provider 是有用的
28、。一個(gè) Content Provider 是一個(gè)類,它實(shí)現(xiàn)了的一個(gè)標(biāo)準(zhǔn)設(shè)置來讓其他應(yīng)用程序據(jù)類型。和恢復(fù)被 Content Provider 處理的數(shù)由 提供18Download at Pin5i.Comandbook - Android 編程Android 用戶界面 (UI)Android 中的用戶界面可以用兩種方式來創(chuàng)建,通過定義 XML-代碼 或通過編寫Java- 代碼。在 XML 中定義 GUI 結(jié)構(gòu)是非常,因?yàn)檎缒銖?MVC(M-Viewer-Control)原理中所知的,UI 應(yīng)該總是從項(xiàng)目邏輯中分離出來。另外,使一個(gè)項(xiàng)目從一個(gè)屏幕到另一個(gè)更加簡(jiǎn)單了。在 X
29、ML 中定義一個(gè) UI 是和創(chuàng)建一個(gè)普通的 HTML 文件非常相似,這個(gè)文件是你有的,換而言之,如此簡(jiǎn)單的文件:和 Android 的 XML-布局一樣。每一樣結(jié)構(gòu)好并且能夠通過樹形結(jié)構(gòu)來表達(dá)。由 提供19<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android=""android:orientation="vertical" android:layout_width="fill_parent&
30、quot; android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World!"/></LinearLayout><html><head><title>Pa ge Title</ title></head>&l
31、t;body> The content of the body element. </body></html>屏幕元素層次Android 應(yīng)用程序基本功能單元是Activity一個(gè)android.app.Activity 類的物件(Object)。一個(gè) Activity 能夠做許多事情,但是通過它它出現(xiàn)在屏幕上。為了讓你的 Activity 出現(xiàn)在屏幕上和設(shè)計(jì)它的 UI,你使用 View 和 ViewG roup(表現(xiàn)在 Android 平臺(tái)上的基本用戶界面單元)來工作。View一個(gè) View 是一個(gè)繼承于 android.view.View 基類的物件。它是一種
32、數(shù)據(jù)結(jié)構(gòu),它的屬性為一個(gè)特殊的屏幕矩形域布局(la yout)和 Content。一個(gè) View 物件處理它描繪的屏幕區(qū)域的、布局、繪制、焦點(diǎn)改變、翻屏和按鍵或手勢(shì)。View 類作為一個(gè)基類為所有的 widget一系列完整實(shí)現(xiàn)的繪制交互屏幕元素的子類服務(wù)。Widget 處理它們的和繪制,因此,你可以使用它們來更快速地構(gòu)建你的 UI??色@得的 widget 列表:(換言之)TextView 、EditVie w、Button、RadioButton、Checkbox、ScrollView ,Viewgroup一個(gè)View group 是一個(gè)android.view.View group 類物件。
33、顧名思義,一個(gè) view group 是一個(gè)特殊類型的 view 物件,它的功能是用來包含和管理一系列下屬 view 和其他 view group,View group 讓你給你的 UI 添加結(jié)構(gòu)和構(gòu)建起復(fù)雜的可以稱為一個(gè)單獨(dú)的實(shí)體屏幕元素。View group 類作為一個(gè)基類為 la yout一系列完整實(shí)現(xiàn)的提供普通類型屏幕元素的子類服務(wù)。Layout 給你式來為一系列 view 創(chuàng)建一個(gè)結(jié)構(gòu)。由 提供20Download at Pin5i.Comandbook - Android 編程樹形結(jié)構(gòu) UI在 Android 平臺(tái)上,如下圖所示,你使用一個(gè)樹形 View 和
34、View group 節(jié)點(diǎn)定義一個(gè) Activity 的 UI。這個(gè)樹形可以簡(jiǎn)單或復(fù)雜,如你所需來創(chuàng)建它,并且你可以使用 Android 一系列的預(yù)定義 Widget 和 Layout 或是你創(chuàng)建的 Custom View類型來構(gòu)建它。圖 4 Android UI樹形結(jié)構(gòu)屏幕起來,你的 Activity 調(diào)用它的 setContentView( )為了描述把和傳物件 ,遞一個(gè)樹形根節(jié)點(diǎn)物件的。一旦Android 系統(tǒng)擁有這個(gè)樹形根節(jié)點(diǎn)它就可以直接使用該節(jié)點(diǎn)來工作,使無效、度量和繪制樹。當(dāng)你的 Activity變成激活和聚焦,系統(tǒng)通知你的 Activity 并請(qǐng)求根節(jié)點(diǎn)度量并繪制出樹。根節(jié)點(diǎn)接著
35、請(qǐng)求它的子節(jié)點(diǎn)輪流繪制子節(jié)點(diǎn),一個(gè) View group 節(jié)點(diǎn)有責(zé)任繪制它點(diǎn)。如前面陳述,每一個(gè) View group 有責(zé)任度量它的可用空間,布局它的子節(jié)點(diǎn) ,并在每個(gè)子節(jié)點(diǎn)上調(diào)用 draw()來它表述。子節(jié)點(diǎn)可能會(huì)在父節(jié)點(diǎn)中請(qǐng)求一個(gè)和位置,但是父物件有每一個(gè)子 View 放哪里、有多大的最終決定權(quán)。由 提供21Android UI 元素與 Swing UI 元素比較一些正在閱讀本文、大概已經(jīng)用 SwingUI 編過程的開發(fā)者會(huì)覺得 Android 和SwingUI 元素有一些相似。Activity 在 Android 中差不多和 Swing 中的(J)Frame 相參
36、考View 在 Android 中和 Swing 中的(J)Components 相參考TextView 在 Android 中和 Swing 中的(J)Lable 相參考EditText 在 Android 中和 Swing 中的(J)TextField 相參考Button 在 Android 中和 Swing 中的(J)Button 相參考在 Android 中給一個(gè) View 設(shè)置器和在 Swing 中幾乎相同。由 提供22Download at Pin5i.Com/AndroidmyView.setOnClickListener( new OnClickListe
37、ner() ./ SwingmyButton.addAction Listener( new Action Listener() .andbook - Android 編程AndroidManifest.xmlAndroid Manifest.xml 是所有 Android 應(yīng)用程序必須的文件。它位于應(yīng)用程序的根目錄中,并且為你的套件描述全局變量,套件向外界的應(yīng)用程序組件(Activity、Service 、等等),你的每個(gè) Activity 和 co.可以處理什么樣的數(shù)據(jù),和它們?nèi)绾伪贿\(yùn)行。該文件提及到一個(gè)重要的事情是它調(diào)用 IntentFilter 。這些 Filter( 過濾器)描述了哪
38、里和什么時(shí)候 Activity 能夠啟動(dòng)。當(dāng)一個(gè) Activity(或是操作系統(tǒng))想要執(zhí)行一個(gè)動(dòng)作,例如打開網(wǎng)頁(yè)或是打開一個(gè)選擇 人屏幕,它創(chuàng)建一個(gè) Intent 對(duì)象。這個(gè)Intent- 對(duì)象能夠保存許多描述了你要干什么的,什么數(shù)據(jù)需要完成和其他小。Android 在一個(gè) Intent 對(duì)象中使用每個(gè)應(yīng)用程序出來的 IntentFilter 比較這個(gè),并找出最適合的 Activity 來處理這個(gè)數(shù)據(jù)或是被撥號(hào)器指定的動(dòng)作 。假超過一個(gè)應(yīng)用程序能夠處理那個(gè) Intent,Android 就會(huì)詢問用戶喜好哪一個(gè)應(yīng)用處理它。除了你應(yīng)用程序的 Activity、Content Provider 、S
39、ervice 和 Intent Receiver,你也可以在 Android Manifest.xml 中指定。由 提供23的一個(gè)非常簡(jiǎn)單的 Android Manifest.xml 文件像這樣的:幾乎每一個(gè) Android Manifest.xml( 也包含許多 Android XML 文件)在它第一個(gè)元素中都會(huì)名字空間(xmls:a ndroid=)。這樣在該文件中做了一種標(biāo)準(zhǔn)的 Android 屬性值。這個(gè)屬性將會(huì)用來為該文件中元素支持多數(shù)數(shù)據(jù)。幾乎每一個(gè) Manifest 都了一個(gè)單獨(dú)的<applica tion>,該會(huì)包含許多描述在本簽。可用的 Ap
40、plication(應(yīng)用程序)、IntentReceiver ,等等的標(biāo)如果你想要讓一個(gè) Activity 通過用戶可直接運(yùn)行,你將需要讓他支持 MAIN動(dòng)作和 LAUNCHER category( 種類),它的結(jié)果如下所示:圖 5 可直接運(yùn)行的Activity由 提供24Download at Pin5i.Com<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android=""package="org.anddev.andr
41、oid.hello_android" ><application android:icon="drawable/icon" ><activity android:name=".Hello_Android" android:label="string/app_name" ><intent-filter ><actionandroid:name="ent.action.MAIN" /><category android:name
42、="ent.category.LAUNCHER" /></intent-filter></activity></application></manifest>andbook - Android 編程以下是一個(gè)Android Manifest 文件結(jié)構(gòu)的詳細(xì)列表,描述了所有可用的<tag> 每一個(gè)附有示例:,<manifest>這是每一個(gè) Android Manifest.xml 的根節(jié)點(diǎn)。它包含了指向任何包里面 Activity 外層的套件屬性。其他的 Activity- 路
43、徑將會(huì) c 對(duì)的基于它的值。<uses-permission>描述一個(gè)為了讓你應(yīng)用程序操作正確(換句話說,當(dāng)你想要發(fā)或是使用練習(xí))它必須被授予的安全用戶授予。數(shù)量級(jí):0 +。在安裝你的應(yīng)用程序期間,這個(gè)通過<permission>一個(gè)安全,可以用來限制哪些應(yīng)用程序可以你套件中的組件和特性(或其他的)。數(shù)量級(jí):0+<instrumentation>一個(gè)編排組件的代碼,它可用來測(cè)試組件的功能或是其他套件。參看+instrumentation 的詳細(xì)內(nèi)容。數(shù)量級(jí):0<application>根元素,包含了套件中包含的應(yīng)用程序級(jí)組件的全局且/或默認(rèn)屬性,
44、例如一個(gè) Label 文本,等。數(shù)量級(jí):0 或 1。該元素也可以為應(yīng)用程序,icon,theme,必須的由 提供25<application android:icon="drawable/icon" ><uses-permission android:name=" android.permission.RECEIVE_SMS"/><manifestxmlns:android=""package="com.demo.android.bmi2.toast"你可以把 0
45、 替換+成下面的每個(gè)子元素:<activity>一個(gè) Activity 是應(yīng)用程序和用戶交互的主要事物。當(dāng)運(yùn)行一個(gè)應(yīng)用程序時(shí)用戶看到的首顯屏幕是一個(gè) Activity,并且多數(shù)用戶使用的其他屏幕將會(huì)作為的Activity 通過添加 Activity被實(shí)現(xiàn)。注意:不論它被展露給世界或只是有意在它套件中使用,每一個(gè) Activity 在 Manifest 中必須含有一個(gè)<activity>。如果一個(gè) Activity 在Manifest 中沒有符合的 Activity,你將不能運(yùn)行它。,你可以包含 1<+intent-filter> 元素來隨意地,為了支持新的運(yùn)
46、行Activity 支持的動(dòng)作。該<intent-filter>了一個(gè)組件支持什么類型的 Intent。除了多種能在這個(gè)元素下被說明的值以外,這里給出的屬性也可以為已經(jīng)描述的動(dòng)作 action 支持一個(gè)單獨(dú)的 label、ico n和其他。<action>一個(gè)該組件支持的動(dòng)作類型。例如:由 提供26Download at Pin5i.Com<action android:name="ent.action.MAIN" /><intent-filter><activity andr
47、oid:name=".Welcome"android:label="string/app_name" >andbook - Android 編程<category>一個(gè)該組件支持的 category 類型。例如:<data>一個(gè)該組件支持的 MIME 類型,URI 體系、URI 權(quán)威或路徑。你也可以用你的 Activity 來聯(lián)合 1 +個(gè) meta-dat段:<meta-data>添加一個(gè)meta-dat 來檢索。段到Activity 中,客戶可以通過 ComponentInfo.meta Data<re
48、ceiver>一個(gè) IntentReceiver一個(gè)應(yīng)用程序被告知交換數(shù)據(jù)和發(fā)生的動(dòng)作,即使它現(xiàn)1 + 個(gè)<intent-filter>元在沒有運(yùn)行。因?yàn)橛辛?Activity,你可以隨意地素,這個(gè)<intent-filter>是該 Receiver 支持的或是<meta-data>值,就像<activity> 一樣。<service>一個(gè) Service 是一個(gè)任意時(shí)間量?jī)?nèi)可以在運(yùn)行的組件。由于有了 Activity 標(biāo)簽,你可以隨意包含一個(gè)或多個(gè)<intent-filter> 元素,這個(gè)<intent-fi
49、lter> 是該 Service支持的或是<meta-data>值; 描述。參看 Activity 的<intent-filter>和<meta-data><provider>一個(gè) ContentProvider 是一個(gè)管理持續(xù)數(shù)據(jù)并發(fā)布它來讓其他應(yīng)用程序。你一可以隨意附加一個(gè)或多個(gè)<meta-data>值,正如 Activity 的<meta-data>描述一樣描寫。當(dāng)然,所有<tag>不得不使用</tag>或是直接地</>來結(jié)束。由 提供27<rec
50、eiver android:name=".SMSReceiver" ><category android:name="ent.category.LAUNCHER" />資源和魔幻的 R.java 文件一個(gè)項(xiàng)目的資源和 R.java 是非常緊密相關(guān)的。資源資源是被你代碼使用和在構(gòu)建時(shí)編譯進(jìn)你的應(yīng)用件)。Android 支持一些不同種類的資源文件,的額外的文件(非代碼文XML、PNG 和 JPEG 文件。XML 文件根據(jù)它們描述的不同而有不同的格式。資源比源代碼更具體化,XML文件被編譯成二進(jìn)制碼,由于高效的,這是快速
51、加載的格式。字符串被壓縮進(jìn)更高效的格式中。資源列表資源類型和它們存放位置:布局文件圖片卡通動(dòng)畫風(fēng)格、字符串、數(shù)組"/res/ la yout/" "/res/drawable/" "/res/a nim/" "/res/ values/"名稱不是必須嚴(yán)格的像這樣:'arrays.xml' 'colors.xml'定義數(shù)組定義顏色#ARGB#RRGGBB定義定義字符串定義風(fēng)格對(duì)象#RGB#AARRGGBB未'dimens.xml' 'strings.xml
52、9; 'styles.xml'文件:mp3/"/res/raw/ "由 提供28Download at Pin5i.Comandbook - Android 編程在代碼中使用資源在代碼中使用資源只是一個(gè)知道完整資源 ID 和你資源已被編譯成什么類型的問題。這里是相關(guān)資源的語(yǔ)法:R.resource_type.resource_ name或android.R.resource_type.resource_ nameresource_type 是R 的子類,該子類擁有指定類型的資源。resources_name 是在XML 文件中定義的資源
53、的名稱屬性,或者是被定義成其他文件格式資源的文件名(除擴(kuò)展名)。每種類型的資源將會(huì)被加載到一個(gè)特殊的 R 子類中,依賴于該資源的類型。被你的應(yīng)用程序編譯的資源可以不用包套件名(如R.resource_type.resource_ name 一樣簡(jiǎn)單)就可以資源,例如:屏幕風(fēng)格和按鈕背景。為了把這些資源。Android 包含了一些標(biāo)準(zhǔn)到代碼中,你必須用android 來表述它們,例如:android.R.drawable.button_background。由 提供29資源在一個(gè)屬性中(或資源中)提供的值也可以是一個(gè)其他資源的。這經(jīng)常用在la yout 文件中來提供字符串(
54、因此它們可以局部化)和圖片(在其他文件中的),而一個(gè)可以是任何包含顏色和整數(shù)的資源類型。例如,如果我們有顏色資源,我們可以編寫一個(gè)設(shè)置文本顏色大小的 la yout 文件 , 顏色、大小是包含于這些資源中的值:注意這里''字首的使用來引入一個(gè)資源-緊跟的文本是一個(gè)處于package:t ype/name 結(jié)構(gòu)中的資源名稱。由于這樣,我們不需要指定套件名,因?yàn)槲覀冊(cè)谖覀兙帉懀禾准幸粋€(gè)資源。要一個(gè)系統(tǒng)資源,你應(yīng)該需要像其他示例一樣,當(dāng)在一個(gè) la yout 文件中提供字符串你應(yīng)該總是使用資源以便它們能夠被局部化:,由 提供30Download at Pin
55、5i.Com<EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="android:color/opaque_red"android:text="string/hello_world" /><EditText android:layout_width="fill_parent" android:layout_height="f
56、ill_parent" android:textColor="android:color/ background_light"android:text="Hello, World!" /><EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="color/opaque_red"android:text="Hello, World!" />andbook - Android 編程可選資源&局部化可選資源和局部化是一個(gè)非常有用的結(jié)果,你將會(huì)喜愛 Android 這樣。期待你會(huì)同時(shí)設(shè)計(jì)出一個(gè)像風(fēng)景的 GUI 和肖像屏幕定位-那是幾乎不可能的。你可以根據(jù) UI 語(yǔ)言或是的硬件配置為你應(yīng)用程序提供不同資源。記住即使你可以不同的字符串、布局和所有其他資源,SDK 沒有顯露出來讓你指定設(shè)置哪一個(gè)可選資源被使用。Android 為硬件、地域察覺適合的設(shè)置,并合適的家在它們。只有用戶可以使用上的設(shè)置面板選擇可選語(yǔ)言設(shè)置。為了包含可選資源,使用破折號(hào)-分
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024事業(yè)單位聘用合同糾紛處理與法律適用總結(jié)3篇
- 2024年多功能設(shè)備維護(hù)合作協(xié)議2篇
- 2024年度數(shù)據(jù)保密與信息安全認(rèn)證協(xié)議3篇
- 2025年拉薩貨運(yùn)上崗證考試題庫(kù)1387題
- 洛陽(yáng)文化旅游職業(yè)學(xué)院《黑臭水體治理技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 科技創(chuàng)新資金撥付管理
- 甘肅省隴南市2024-2025學(xué)年高一上學(xué)期期中考試歷史試卷(解析版)
- 信息技術(shù)部門組織結(jié)構(gòu)
- 城市綠化監(jiān)控系統(tǒng)安裝合同
- 2024年廢棄水塘承包合同最長(zhǎng)期限3篇
- 勞動(dòng)爭(zhēng)議調(diào)解仲裁法
- 城鎮(zhèn)歷史與遺產(chǎn)保護(hù)智慧樹知到期末考試答案2024年
- 【培訓(xùn)課件】醫(yī)療機(jī)構(gòu)從業(yè)人員行為規(guī)范
- 車間生產(chǎn)中的質(zhì)量問題與質(zhì)量改進(jìn)
- 危巖治理施工方案
- 同等學(xué)力申碩-同等學(xué)力(社會(huì)學(xué))筆試(2018-2023年)真題摘選含答案
- 疾病健康宣教的課件
- 部隊(duì)心肺復(fù)蘇
- 2024年人工智能在教育領(lǐng)域的革新與影響
- (全文版)養(yǎng)老院輿情危機(jī)處理策略和框架
- 計(jì)算機(jī)科學(xué)與人工智能教材
評(píng)論
0/150
提交評(píng)論