android學習視頻-深入淺出_第1頁
android學習視頻-深入淺出_第2頁
android學習視頻-深入淺出_第3頁
android學習視頻-深入淺出_第4頁
android學習視頻-深入淺出_第5頁
已閱讀5頁,還剩84頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1入 初探 2008年末最大的沖 Android是什 從創意開 安裝Android開發工 安裝流 開啟現有工 開啟工 導入工 修復工 操作Android模擬 使用Android模擬 列出模擬器類 建立模擬 列出已建立的模擬 移除模擬器場 移除模擬 建立一個Android程 建立新工 初識GUI界 描述使用者界 設計GUI界 視圖 查閱文 離線文 視覺化的界面開發工 獲取標識 存取識別符 新增XML文 解讀程序流 解讀程序流 完成BMI程 完成BMI程 初 重構程 重 初識 加入菜 加入菜單( 定義Android加入新的 獨立的 傳送數據到新的 傳送數據到新 活動的生命周 生命周 Active(活動 Paused(暫停 Stopped(停止 Dead(已回收或未啟動 信 發布到市集 AndroidMarket的方 深入淺出12008目前有15億使用者可以透過電腦,在網看到。若使用者也能上網,其潛在使用者則可以達到30億。,2007年11月5日與其他33家制造商(包含摩托羅拉、宏達電、三星、)、晶片供應商、軟硬件供應商、電信業者所聯合組成的開放手持裝置(OpenHandetAllance),發布了名為「ndroid」的開放軟硬件平臺。參與開放手持裝置的這些廠商,都會基于Androd平臺,來開發新機業務。,緊接著,在Android平臺的一周之后(11月12日),隨即發布了可以免,能在Windows、MacOSX、Linux多平臺上使用的Android開發工具(SoftwareDevelopmentKit,SDK)與相關文件。間隔數天,又再次發布操作系統(kernel),與部分驅動程序的源代碼。一項展示欲將這個現代人的隨身工具推往開放平臺,讓人們可以修改創作出符合自己需求機應用的決心。身為公司創辦人之一的SergeyBrin,也在Android開發工具(SDK)發布的同時,現身于視訊影片中,為大眾介紹Android平臺。SergeyBrin也同時宣佈舉辦總獎金高達1000萬(3億多臺幣)的開發者大獎賽,鼓勵程序開發者去深入探究Android平臺的能力。寫出具創意、實用性十足、能提供使用者更好機使用經驗的應用2008年9月24日,T-Mobile首度第一臺Android(G1)的細節,同日AndoridSDK1.0rc1。對應用程序開發者而言,1.0代表了開發者可以放心地使用APIAPIG11020正式發售。在發售前僅針對T-Mobile用戶的預購活動中,已經被預150萬臺10/21OpenHandsetAlliance公開了全部Android的源代碼。從此,開發者擁有了一個完全開放機平臺。Android是什在可見的將來,基于Android平臺機程序設計,將像今日的PC程序設計一樣及「Android」是一個基于Linux(kernel)的開放平臺操作系統。與WindowsMobile、Symbian等操作系統處在同一級別。對于設備制造商來說,「ndrodAndrod」操作系統讓設備制造商免除「每出一臺,就得被操作系統廠商(如)收取費用」的情況。對硬體開發廠商來說,「ndroid」也是個開放的平臺。只要廠商有能力,可以在這個平臺上加入特有的裝置或功能,不受對于手持裝置的開發者來說,「Android」是個先進的平臺。平臺上的應用程序可相容于各種型號的Androd,免去為各種不同機型開發的困擾。「Android」平臺支援各種先進的網路、繪圖、3D處理能力,可以用來提供更好的使用者體驗。對于使用者來說,「ndroid」是一個用于的操作系統。使用者只要先申請一個免費的帳戶,當使用者想換一臺時,就可以在不同廠牌,同樣使用「Androd」操作系統平臺機之間選擇,并且很容易地將如聯絡簿等轉換到新上。Android在Linux的基礎上,提供了各種合用的函式庫,和一個完整的應用程序框架。并采用較符合限制的Apache。在Linux的基礎上提供的應用程序運行環境(DalvikSunJ2ME不同),并提供基于Eclipse整合開發環境(IDE)的免費、跨平臺(Windows、MacOSX、Linux)開發工具(SDK),便于應用程序免費、熟悉的跨平臺開發工具,讓具備一些物件導向觀念,或視窗程序開發經驗的開發,在定間內手1000萬的大獎賽則提供了足夠的誘因,讓第一支Androd手機正式面市前,就擁有了各式各樣的應用程序可供使用。從不同角度來說,Android代表.一個嶄新的開放源代碼操作系統平臺.一個友善的免費應用程序開發環境、.一個與世界各地的程序開發者,站在相同起跑點上的公平競爭機會未來的最好的方式,就是去創造未你是否曾經思考過,當擁有了一臺能夠上網,能夠依照自己的期望修改、調試功能機,會用它來施展什么創意?Androd大獎賽首頁上提供了一些方向。你的心里可能已經有了關于程序的絕好創意,你想在Android開放平臺上,實現因為其他封閉平臺的種種限制,而無法在上達成的需求;無論你以何種目的來看待「Android」平臺,都需要為了達成你的創意,所需的一些基本協助。本書所提供的內容,將可以協助你快速地理解Android平臺的概念。提供你初次開發 Android資料應用程序的過程,與詳細的Android應用程序實例解說。要開Android應用程序,你甚至不需要擁有實機。已經為提供了各個主要平臺(Windows、Mac、Linux)上可用的開發工具包。開發工具包中,也包含了Android手機模擬器,好讓在電腦上就能完成所有機應用程序開發工作。接著,就先來安裝Android開發工具吧。參考資Android 開放手持裝置(OpenHandsetAlliance) Android開發者部落格/Android開發者大賽 Android文件 /pub/a/onlamp/2007...e-CNet m/0,200...Android源代碼Android開發工AndroidAndroid提供免費而且跨平臺的整合開發環境,只要電腦能連接上網路,隨時都能相關工具下來,并開始開發Android應用程序。有了輕便易用的開發工具,可以系統需Android的應用程序,需要一套個人電腦系統。至于操作系統的部份,幾個主流支援的操作系統如下WindowsXPMacOSX10.4.8或之后版本(適用x86架構的 Linux(于Ubuntu6.10DapperDrake上測試AndroidJDK5或JDKJava(JDK5JDK6)Java運行環境(JRE)是不夠的,你需要安裝Java開發環境(JDK)。你可以在命令行上輸入「java-versionjava版本(java版本需>1.5)。AndroidJavaGnu(gcj) IDE,一個多用途的開發工具平臺你可以安裝Eclipse3.3(代號Europa)或3.4(代號Ganymede)版請注意你選擇的版本需包含EclipseJava開發工具擴充套件(JavaDevelopmentToolPlugin,JDT)。EclipseIDEJDTEclipse平臺不熟悉的話,建議直接選擇「forJavaDevelopers」版本來。ADT,基于EclipseAndroid開發工具擴充套件(AndroidDevelopmentToolsAndroidSDK,Android程序開發套件,包含 模擬器(Emulator)其他開發環境工具(非必要安裝oLinuxMacApacheAnt16.5WindowsApacheAnt1.7oNetBeans、IDEAAndroid開發工具,但本書中還是以基于Eclipse平臺的開發工具為準,其他平臺不予涉及。安裝流JDK5JDK6Android步EclipseADTAndroidSDKAndroid詳細的安裝流程如下Eclipse首先需要Android開發時會用到的整合開發環境Eclipse目前Android應用程序只支援使用「Java」程序語言來編寫Android應用程序。所以開發前必須先安裝Java開發套件(JavaDevelopmentKit,JDK)。各平臺的JDK可至 MacOSX操作系統則已內建JDK。安裝好JDK后,可以前往Eclipse下載Eclipse這個方便的整合開發環境。Eclipse時請選「EclipseIDEforJavaDevelopersEclipseIDEforJavaEEDevelopersEclipseJDT的是「EclipseIDEforJavaDevelopers」版本。完同樣先解壓縮到適當下。安裝點擊Eclipse開始執行Eclipse整合開發環境。Eclipse時會彈出視窗讓你決定預設的工作。一般使用Eclipse預設的工作到EclipseIDE后,不必急著四處觀望。先來安裝Android開發ADT擴充套EclipseAndroid(ADT)Eclipse3.4Help->SoftwareUpdates選擇「AvailableSoftware」標題,選擇右方的「AddSite...」(新增)按鈕,會彈出在輸入框中的"Location"欄位中輸入「 按下"OK"按鈕離開。Eclipse會花一點時間尋找合適的版本。如果不行的話可以嘗試使用http:/ /android/eclipse/,有時候https是無法的。在視窗中全選「https:/ 按下「Next」(下一步)鍵。照著步驟就安裝完成。安裝完會提示需重新啟動Eclipse,按下「Yes」重新啟動。Eclipse3.3Help->SoftwareUpdates->FindandInstallSearchfornewfeaturestoinstall(搜尋新功能供安裝)Next(下選擇右上角的「NewRemoteSite」(新增遠端)按鈕,會彈出一個「NewUpdateSite」(新增更新)輸入框。在輸入框中輸入擴充套件的名稱(Name)「ADT」跟(URL)「 FinishEclipse會花一點時間尋找合適的版本。接著要做的,就是等Eclipse顯示出選項時,勾選合適的版本安裝。安裝完會提示需重新啟動Eclipse,按下「OK」重新啟動。離線安裝安裝Android開發工具。這時可以先前往/sdk/adt_downloadhtml,手動最擇「Help->SoftwareUpdates」選項,這選項會帶出一個新視窗。選擇「AvailableSoftware」標籤,選擇右方的「AddSite...」選擇右上角的「Local...」按鈕,并選取剛的Android開發工具檔桉,選到之后按下"OK"按鈕離開。在視窗中全選新出現項目的所有選項后,按下右方的「Install」按鈕。Eclipse會花一點時間開始安裝ADT擴充套件。AndroidSDK接著要從/Android 「Android開發套件」(SoftwareDevelopmentKit,SDK)。下來的SDK檔桉需要先解壓縮。Windows平臺需要先另行安裝解壓縮程序,如免費的7-zip解壓縮工具。解壓縮后會出現一個資料夾。為了之后描述方便,解壓縮后的AndroidSDK檔Android打開偏好設定頁面(Preference),選擇Android(請確認您已安裝好ADT擴充套件,Android標志才會出現在偏好設定頁面中)SDKLocation欄位按下"Browse..."鍵,選擇剛剛解壓縮完的「android_sdk」檔桉夾所在地,然后按下視窗右下角的套用(Apply)按鈕。這樣一來,AndroidSDK就算是設定好啦。SDK1.5ADT擴充套件,才能順利設定新版的AndroidSDK。方法是在螢幕上方的選單列,選擇「Hep>oftwaepdaes」選項,在彈出的視窗上方點選「nstaledoftware」頁面,選擇「Androd」開頭的選項,點選右側的「Uninsal..」按鈕移除這些相關的插件。下一設定好AndroidSDK后,就擁有了一個完整的Android開發環境。先來看看AndroidSDK中提供的一些范例,Android到底能做些什麼。Eclipse安裝擴充套件/guide/deve...回到Eclipse環境來。在屏幕上方的選單列上,選擇「File->New->Project會彈出「NewProject」視窗。Eclipse是通用的編輯環境,可根據你所安裝的不同擴充套件而支援許多種類的工程。點擊「Android資料夾下AndroidProject」,會開啟「NewAndroidAndroidSDKApiDemos范例。在「NewAndroidProject」。視窗中,點選"Browse..."按鈕以選擇「開啟已經存在的工程」(Createprojectfromexistingsource)在此選擇位于「android_sdk/platforms/android-1.5/samples」中的Android應用程序工程(android_sdk/platforms/android-1.5/samples/ApiDemos)。。當選擇了現存的范例程序工程時NewAndroidProject」視窗中的諸如工程名稱(ProjectName)與屬性等內容都將被自動填寫好。這時可以按下「Finish」按鈕,完成從現存工程新增工程到Eclipse環境的動作。導入工 下的警告。因此得用另一個方法:導入工程。在屏幕上方的選單列上,選擇「File->Import」選項,會跳出「Import」視窗。選擇「>ExitingrojctsitoWokSae」項目,然后按ext」按鈕帶到新一個畫面。在「SelectRootirectoy」欄位旁,按下右方的「Broe...」按鈕,選擇對應的工程。選擇好后,按下「inih」(WrSpe)Ecpe修復工ADT內建的功能來試著修復。在「PackageExplorerApiDemos」工程檔/guide/tuto...桉夾圖示上點選右鍵,從「AndroidTools」選單中選擇「修復工程屬性」(FixProjectProperties)。(AndroidTools->Fix/guide/tuto...參考資*如何開啟oWorld程序Android模擬器Android已經透過「Eclpe」開發環境,開啟了「ApDemos」源代碼。本章將講解如何設定和操作Androd模擬器。設定Android「Android開發套件」(SDK)1.5以上的版本提供了支援不同版本模擬器的功能,在使用模擬器之前,必須先建立一個模擬器后才可在Eclipse開發環境中使用。SDK中提供了一個「android」命令行工具(android-sdk/tools中),可以用來建立AndroidAndroid模擬器稱作「Android虛擬機器」(AndroidVirtualDevice),簡寫為「AVD」以作區別。列出模擬器首先,把「android- 加入系統路徑,以后就可以在任何地方使「android-sdk/tools 在Windows2000,XP,2003這些操作系統里,點選「電腦右鍵>屬性>高>環境變數」。在「系統變數(S)」欄中,選取「PATH」變數名稱后,再點選「編輯(I)」按再此假設您安裝AndroidSDK的路徑是「androd-sdk\ools」,接著在彈出的視窗中將「;android-sdktoos」(注意要以分號隔開)這字串添在原本的字串之后,按下確定后重新啟動操作系統。執行」,在彈出的輸入框中輸入「cmd」,即可開啟命令行工LinuxMac或是您也可以直接打開命令行,進入「android-sdk/tools ,輸入LinuxMac$androidlistAndroidSDK$./androidlist螢幕上會列出所有支援的模擬器類s$androidlistAvailableAndroid sid:Name:Android1.1Type:PlatformAPIlevel:2id:Name:Android1.5Type:PlatformAPIlevel:3id:Name:APIsType:Add-OnVendor:Inc.Description:Android+APIsBasedonAndroid1.5(APIlevel3)com..android.maps(maps.jar)APIfoogleMaps在這邊列出了三種模擬器類型。分別是(id)為1、2的Android1.1、1.5模擬器,(id)為3的「APIs」,把自己提供的應用程序(如Map)放「APIs」這個模擬器類型中,因此要開發Map等專屬應用程序時就必須先建立3這類型的模擬器,稍后才能在適當的模擬器上作驗證。AndroidSDK1.5模擬器。$androidcreateavd--2--name這段命令的意思是:使用「androidcreateavd」命令來建立一個新的模擬器,「--2」參數的意思是這個模擬器使用id2的模擬器類型(Android1.5),「--namecupcake」$androidcreateavd--2--namecupcakeAndroid1.5isabasicAndroidplatform.Doyouwishtocreateacustomhardwareprofile[no]CreatedAVD'cupcake'basedonAndroid1.5列出已建立的模擬器在命令行中輸入以下命令$androidlist產生的結果如下:$androidlistAvailableAndroidVirtualDevices:Name:cupcake:Android1.5(APIlevelSkin:環境來,設定執行應用程序所需的環境設定環境參數程序的環境參數。以后使用其他程序專桉時,也能用同樣的方式,讓這些程序在首先,透過選單列上的「Run」(執行)選單,選擇「開啟執行參數設定」(Run->DebugConfigurations...)進入運行環境參數設定畫面。進入設定畫面后,在視窗左側會有一整排Eclipse支援的運行設定,從中找選擇「New」選項后,在「AndroidApplication」項目下方會多出一列執行項目。可以在Name欄位上輸入一這個環境參數的名稱,在此輸入與專桉名在「Proect」欄位右方,點選「rowse...」按鈕,開啟「選擇」(Proecteecton)視窗,選擇「ApDemos」專桉并點選「OK」按鈕,以選擇要執行的工程。LaunchActionLaunchDefaultActivity至此就完成了模擬器環境參數的設定。點選右下角的「Debug」按鈕Eclipse就會啟動Android模擬器。小技巧在選單列,也可選擇設「unonfgraon..選項。這得的是一幾Debug」按鈕變成了「un」按鈕。「Debug」與「unDebu中會介紹的gdAndroid當設定好之后,以后碰到要再次啟動模擬器的情況時,只要在螢幕左上角「Debug」或「un」圖示右側小箭頭上按一下,從彈出的選單中選擇剛剛設定的環境參數名稱,模擬器即開始執行,并安裝好所指定的專桉應用程序。Android切換模擬器場景在命令列上執行「androidlists」命令后,可以看到螢幕上列出所有支援的模擬器類型。舉剛才建立過的第二種類型(id2)模擬器為例,列出訊息如下:id:Name:Android1.5Type:PlatformAPIlevel:3Skins:G1,HVGA(default),HVGA-L,HVGA-P,QVGA-L,QVGA-Skins預設有「HVA」與「QVA」兩種畫面配置選項可選擇,「HVA」與「QVA」又可以再各自分為「-L」(andc,橫式)與「-」(porrat直式)。要建立「QVGA」模式的模擬器,則一節「androidcreateavd」命令后,附加上「--skinQVGA」選項即可。要將預設的「HVGA直式」顯示改為橫式,則可以透過使用快速鍵,切換螢幕Windows操作系統上按下「Ctrl」和「F12」鍵,或是在MacOSX操作系統上同時按下「fn」和「7」鍵,螢幕就會從預設的直式顯示改成橫式顯示,再按一次則切換回原新增模擬器外觀設定Android模擬器的用途,就是協助在電腦上也能模擬真實的動作。不禁會想,Android除了預設的模擬器外觀之外,以世界第一臺發Android「T-MobileG1」為例有人已經作好了「T-MobileG1」的模擬器外觀。可以前往。到「android_sdk/platforms/android-1.5/skins」下。做完后在命令列中輸入「androidlists」命令,即可發現id2(Android1.5)列表中的「Skins」項目新增加了「G1」一項(可透過更改名稱來自行命名)。id:Name:Android1.5Type:PlatformAPIlevel:3Skins:G1,HVGA(default),HVGA-L,HVGA-P,QVGA-L,QVGA-要建立使用新模擬器外觀的模擬器,可以在之前命令后加入「--skin」選項。命令$androidcreateavd--2--namedevphone–skin也可以偷懶不用參數的全名,將參數用簡寫表示。即用「-t」表示「--」,用-n」表示「--nae」,用「-s」表示「--skn」。改輸入如下:$androidcreateavd-t2-ndevphone–s移除模擬器要移除一個模擬器場景,直接刪除在「androd_sdk/patformandrod-1.5skins」中的對應即可。移除程已經順利地啟動了模擬器,那麼,該怎麼移除安裝到模擬器上的程序AndroidSDKadbAndroidDebugger)(sdk/tools中),可以用裡面的s工具連上模擬器來移除應用程序。在某些平臺上,這些動作可能需要擁有root權限才能執行。adb$adb接著切換到 $cdls命令(windowsdir命令)# -11-1120:59rmApiDemos#rmApiDemos.apk#ls$androidlistAvailableAndroidVirtualDevices:Name:cupcake:Android1.5(APIlevelSkin:表示現在系統中有一個名為cupcake的模擬器。可以使用「androiddeleteavd--namecupcake」命令來刪除名稱為「cupcake」的模擬器。$androiddeleteavd--namecupcakeAVD'cupcake'deleted.$androidlistAvailableAndroidVirtual表示系統中已經不存在任何模擬器,真的已經將模擬器刪除了。閱讀參考模擬器操作細節/guide/deve...模擬器外 Android程幾章已經學到怎麼開啟現有的專桉,也導覽過了整個模擬器的設定流程。現在從設計一個簡單實用的身高體重指數計算(M)應用程序開始,學習設計一個ndrod應用程序所需的基礎。BMI身高體重指數(又稱身體質量指數,英文為BodyMassIndex,簡稱BMI)是一值...當需要比較及分析一個人的體重對于不同高度的人所帶來的健康影響時BMI值是一個中立而可靠的指標。簡而言之,要設計的程序就是允許輸入身高體重,按下「計算BMI」鍵后就在螢BMI值,并彈出「你應該節食」、或「你應該多吃點」...等健康建議。健康建議的判斷:BMI25BMI值低于「20很簡單。畢竟要學習的關鍵知識,不是在于BMI值的算法或健康建議的內容,而是在于Android程序的方式。參考資源身高體重指首先,照前面章節的教學,建立一個新的程序工程。并將新工程名稱命名為BMI。在「內容」欄里,選擇「在工作區域中建立新專桉」(Createnewprojectinworkspace)。這時,如果在"選擇欄"取消掉勾選「使用預設」(Usedefaultlocation)選項,就可以切換專桉的資料夾。大部分的時候并不需去改動這個選項,而是直接使用預設的資料(Properties)等內容都被自動填寫在此對"NewAndroidProject"框中出現的這些欄位作些簡單的說明:名稱描述Project 包含這個項目的資料夾的名稱ApplicationNamePackageName包(Package)名稱,JAVA的是用套件名稱來區分不同的類別(class)。CreateActivity使否建立這個是項目的主要類別,勾選后可以指定這個類別的名稱。這個類別是一個Activity類別的子類別。可以在「Activity」中啟動程序和控制程序流程,Build選擇用來編譯專桉的SDK版本。當選定了Build 在MinSDKVersion欄位中自動填入對應的值MinSDKVersionSDK版本代號。ProjectName:BMIApplicationName:BMIPackageName:com.demo.android.bmiCreateActivity:Bmi填好值后按下「Finish 按鈕,就建立好新工程了注意PackageName必須至少由兩個部分所構成,例如com.androdActivityName」是指定用來產生預設javaActivity類別(class)的名稱。依照java語言名,「ActivityName」最好是用開頭大寫的形式。回到Eclipse主畫面,注意到在左側PackageExplorer視窗中已順利新增加了一 程序工乍看之下,Android插件已幫建立了不少。檢視新建立的BMI檔桉夾中的內容,可以將一個Android應用程序基本的檔桉結構歸納成如下:來看看 應用程序的基本檔桉結構,以及各自所負責的內容src/源代碼srcAndroid應用程序中所需的各個程序碼檔桉。這些檔桉被包在對應package(如本章的BMIsrc中比較關鍵的程序有Bmi.java這個檔桉的檔名會隨著你在建立一個新的程序專桉畫面中所填入「CreateActivity」欄位值的不同而改變。這是新程序專桉中的主要程序區塊。開發Android程序的多數時間,都是在src下和Android打交道。gen/自動生成gengenR.javaR.javaADTresXML描述文件、圖像等資源,同步更新修改'R.java'Android程序中都會有以R.java為名的這個檔桉,你完全不需要,也應避免手工修改R.java這個檔桉。R.java中自動產生的「R」類別就像是個字典一樣,包含了使用者界面、圖像、字串等各式的資源與相應的(id)。Android應用程序中很多時候會需要透過R類別調用資源。編譯時編譯器也會查看這個資源列表,沒有使用到的資源就不會編譯進去,為應res/資源「res」中存放所有程序中用到的資源檔桉。"資源檔桉"指的是資料檔桉,或編譯時會被轉換成程序一部分的XML描述檔。Android針對放在「res」下的不同子 內容res/中的程序layout/版面配置 「layout 包含所有使用XML格式的界面描述檔「layout」中的XML界面描述檔就像寫網頁時用到的HTML檔桉一樣,螢幕上的版面編排與使用的界面元件。XML界面描述檔描述的內容可以是整張螢幕,也可以只JavaXML描述檔來建立使用者界面相對更簡單,架構也更清晰,以后時更容易釐清問題。要使用這些界面元件,應透過「R.javaRvalues/參數值(value)「values」包含所有使用XML格式的參數值描述可以在此添加一些額外的資源如字串(很常用)、顏色、風格等。使用時也是透過「R」類Android功能「ndroidManfet.xml」是ndrod程序的功能,應用程序在這離列出該工程所提供的功能。當應用程序開啟時,會提供諸如內容提供者(onentProider)、處理的資料類型、實際運行的類別、跨應用程序的資訊等等訊息。你可以在此指定你的應用程序會使用到的服務(諸如能路、PS功能等)別(ctiity)時,你也需要先在此這個新增的ctiity類別后,才能順利調用。參考資Android應用程序的檔桉組織方式與用途/guide/appe...初識GUI界面描述使用者界將一份創意到可執行的應用程序,背后需要的是從閱讀與寫作程序碼中累積的經驗,并有堅持理念、直到完成的耐心。表達使用者界面可以先用前幾章教的方法設定并執行模擬器,看看模擬器后的結果看到一個文字欄位,上面有一串文字「oWorld,Bmi!」。這就是Android預設由于才剛開始實際接觸到Android應用程序,先從簡單的開始:這一節中,的目標是將「oWorld,Bmi!」換成別的文字。那么,「oWorld,Bmi!」,這串字串藏在哪里呢?先打開「res/layout/main.xml」<?xmlversion="1.0"encoding="utf-<LinearLayout >android:text="oWorld,原來「oWorld,Bmi!」字串就藏在「res/layout/main.xml」這個檔桉的第10行中。只要簡單地將第10行修改成如下 oWorld,再執行一次模擬器,就可以得到一個相似的應用程序,只是內文變成了剛剛修改的容,既然找到了 oWorld,Bmi!字 就試著將「android:text屬性值從 ,android:text="哈嘍Android要開始學習Android應用程序確實很簡單吧?不過為了顯示「 oWorld,Bmi」,也用main.xmlXMLAndroidGUI界面都是透過ViewGroup或ViewViewGroup和View是Android平臺上最基本的使用者界面表達單元。可以透過程序直接呼叫的方法,調用描繪使用者界面,將螢幕上顯示的界面元素,與構成應用程序主體的程序邏輯,溷合Android提供的這個較優雅的方式,使用XML描述檔,來描述界面元件的組織。講看到的「oWorld,Bmi」就包含在「main.xml」這個檔桉中。接著,就1<?xmlversion="1.0"encoding="utf-XML(ExtensibleMarkupLanguage)樣子當類似網頁所使用的HTML標記語言XML被廣泛地運用在Java程序的設定中是以XML格式描述的。2,612 "線性版面配置"(LinearLayout),使用了兩個「LinearLayout」,來表示一個界面元件的區塊。后頭的前加上一個「/」符號來表示結束。"線性版面配置"所指的是包含在「LinearLayout」中,所有元件的配置方式,是將一個接一個元件由上 面接的URL(),表示這個描述檔桉會參照到Android名稱空間提供的定義。所有Android版面配置檔桉的最外層中,都必須包含這個屬性。注意需要兩兩對稱。一「」在一串敘述的前頭,另一個:3-5「」中的敘述被稱為「LinearLayout」的「屬性」。Android應用程序在layout目錄中的,大多數的屬性前都有一個「android:」前綴。同一個界面元件的屬性之間,是以空白做區隔,因此事實上你也能將多個屬性寫在同一行。當然,將屬性排成多行更易于閱讀。應該保持這個好。界面元件都有許多共同的屬性,例如界面元件的長,寬度設定屬性。Android界面元件的寬度、長度設定屬性分別叫做「android:layout_width」、「android:layout_height。兩個都設定為「fill_parent」參數值。「fill_parent」如其名,所表達的的意思就是"填滿整個上層元件"。預設LinearLayout界面元件就會充滿整個屏幕空間。界面元件彼此間也會有一些不同的屬性,例如「LinearLayout的「android:orientation」(版面)屬性。在此填入「vertical」(垂直)屬性值,表「android.view.ViewGroup」是各種布局配置(layout)和視圖(View)元件的基礎類別。常見的實現有LinearLayout(線性版面配置)、FrameLayout(框架版面配置)、TableLayout(表格版面配置)、Absoluayout(絕對位置版面配置)、RelativeLayout(相對位置版面配置)等。雖然有這么多種版面配置方式可以選用,但大多數的應用程序并不需特地去改變預設的第7和11TextView(文字檢視)是看到的第一個熟悉的界面元件。其作用是顯示文字到屏幕上。你可能注意到這個結尾使用了「/>」符號。「>」符號表示這個XML敘述中沒有內文,亦即此界面元件描述中不再包含其他界面元件,也表示這個界面元件就是這個螢幕中最小的組成單元了。第8-10android:text="oWorld,bmi"TextView「android:layout_width」和「android:layout_height」剛剛已經學過了,分別代表寬度跟長度。「android:layout_width」的「fill_parent」參數值表示寬度填滿整個上層界面元件(即LinearLayout界面元件)。「android:layout_height」則是用上一個新的參數值「wrap_content」(包住內容),亦即隨著文字欄位行數的不同而改變這個界面元件的高度。最后的「android:text」屬性則是TextView界面元件的主要屬性,亦即文字欄位中顯示的文字內容。至于「@string/o」這段字串所代表的意義,馬上會接著在后面章節說明。現在已知道是:只要將「android:text」屬性內容替換成想要文字,在預覽畫面或在模擬器中就會顯示對應的文字。將以上的XML描述綜合起來,就可以得知「main.xml」想表達的界面就累積起了一些經驗,也歸納出了許多應對之道。如著名的MVC(Model-View-Controller)模式。Android為考慮了界面修改問題。Android為了單純化界面修改方式,采用了目前比較流行的解決--即將界面描述部份的程序碼,抽取到程序外部的XML描述文件AndroidTextView所顯示的純文字內容。那么...這個經驗能不能直接用到BMI應用程序的設計上呢?為了輸入BMI程序所需的身高體重值,大致上需要兩個TextView元件用來提示填入身高體重數字,另外也需要兩個文字輸入欄位用來填入身高體重數字。還需要一個按鈕來開始計算,而計算完也需要一個TextView元件來顯示計算結果。于是初版的BMI應用查閱文話說回來,從哪得知各種可用的界面元件呢?其中一個方法是查閱文件Android文件上找到各種可用界面元件列表/guide/tuto...index.html例如想查看EditText的內容,可以點進EditText連結查看其內容/reference/...tText.html你會看到一個詳細地驚人EditTextEditText文字輸入欄位。EditTextTextViewTextView用是提供文字顯示,所以EditTextTextView外,文件中你也可以查找到EditText欄位的一些特殊屬性,如「android:numeric="integer"」(僅允許輸入整數數字)、「android:phoneNumber="true(僅允許輸入),或「android:autoLink="all"」(自動將文字轉成超連結)。例如要限制EditText中只允許輸入數字的話,可以在XML描述檔中,透過將EditText的參數「android:numerictrueEditText離線文當你處于沒有網路連接的情況下時,也可以找到Android文件參考。在 android-sdk后,將之解壓縮,你可以在「android-sdk/docs」 (android_sdk/docs/reference/view-gallery.html),找到一份與線上文件相同的文件參開始設計EditTextTextViewandroid:text="<EditTextEditTextTextView「android:layout_width」與「android:layout_height」屬性。另外,指定的另外兩個屬性「android:numeric」、「android:text」則是EditText界面元件的特別屬性。「android:textTextView將「android:numericintegerEditTextButton<Buttonandroid:id="@+id/submit"android:text="計算BMI值"整這就從文件中挑出需要的TextView(文字檢視)、EditText(編輯文字)、Button(LinearLayout<?xmlversion="1.0"encoding="utf-<LinearLayout >android:text="身高(cm)"<EditTextandroid:id="@+id/height"android:text="體重(kg)"<EditTextandroid:id="@+id/weight"<Buttonandroid:id="@+id/submit"android:text="計算BMI值"<TextViewandroid:id="@+id/result"<TextViewandroid:id="@+id/suggest"可以啟動模擬器檢視執行結果。或是在頁 下選擇「Layout 啟動模擬器之后,模擬器畫面上出現了兩個輸入欄位。欄位上方分別標示著「身高(cm)」、「體重(kg)」。在兩個輸入欄位下方,是一個標示著「計算BMI值」的按鈕。當你在欄位中試著輸入文字或數字(你可以直接用電腦鍵盤輸入,或按著模擬器上的虛擬鍵盤輸入)時,你也會發現,XML描述檔的描述中對兩個EditText欄位所規定的,欄位中只能輸入數字。在上面XML描述檔中定義的最后兩個TextView界面元件,由于并未替這兩個界面元件指定「android:text」屬性,所以在螢幕上并未顯示。這兩個界面元件在后面章節中會派的路高興了沒多久,你發現按下"計算BMI值"按鈕后,應用程序完全沒反應。這是正常的,因為還沒處理從界面輸入取得身高體重、將數值導入BMI計算方式、將結果輸出到螢幕上...等等BMI應用程序的關鍵內容。不過在進入了解程序流程之前,還有一個「android:id」屬性尚未解釋。接著透過講解「android:id」屬性,來進一步了AndroidUI視覺化的界面開發工發工具。以后也許ADT會加入完整的GUI拖拉設計工具。但在ADT加入完整的GUI拖拉設計工具之前,已經有人寫出來了對應Android的GUIDroidDrawAndroidGUI 來源 獲取標識存取識別在上一章談了XML描述檔中界面元件的各種「androd:」開頭的屬性。要使用一個界面元件,第一件事就是定義出界面描述檔。大部分的界面元件(如inearayout、TextVew)(reernce)到的界面元件(如按鈕Button、文字輸入欄位EditText),需要透過在XML描述檔中,作,都能根據「android:id」識別符號來在調用這個界面元件。<EditText 前面章節提過,寫作時最好將XML描述檔屬性分行列出,以易于閱讀(增加可讀性)。而的范例卻將android:id屬性直接擺在EditText于閱讀的考量。當然你也可以將「android:id」屬性分行列出,或是將「android:id在屬性列表的中間或最后頭,這些作法都是允許的,本書中一律使用將android:id屬性直接擺在界面元件后的寫法。「heightandroid:id。以后的程序中會使用「R.id.height」來取得這個界面元件。「@+id的意思是可以通過這個識別符號來控制所對應的界面元件XMLR.java在Android系統中,使用XML來定義UI。但是有些稍微有經驗的開發者可能會有「用XML來描述界面固然方便,但是對于程序來說,直接用XML檔桉是不是太占現在大的多的檔桉空間。解決的方法是Android并不直接使用XML檔桉,而是透過AndroidXML當你建立一個BMI新專桉,打開位于 「R.java/*AUTO-GENERATEDFILE.DONOT*Thisclasswasautomaticallygeneratedbyaapttoolfromtheresourcedataitfound.shouldnotbemodifiedbypackagepublicfinalclassRpublicstaticfinalclassattr}publicstaticfinalclassdrawablepublicstaticfinalint}publicstaticfinalclasslayoutpublicstaticfinalint}publicstaticfinalclassstringpublicstaticfinalint}}在照著前一章新增了XML描述后,再次打開打開「 /demo/android/bmi」目錄下的「R.java」檔,你可以看到如下的程序碼:/*AUTO-GENERATEDFILE.DONOTThisclasswasautomaticallygeneratedbyaapttoolfromtheresourcedataitfound.shouldnotbemodifiedbypackagecom.demo.android.bmi;publicfinalclassR{publicstaticfinalclassattr}publicstaticfinalclassdrawablepublicstaticfinalint}publicstaticfinalclapublicstaticfinalintheight=0x7f050000;publicstaticfinalintresult=0x7f050003;publicstaticfinalintsubmit=0x7f050002;publicstaticfinalintsuggest=0x7f050004;publicstaticfinalintweight=0x7f050001;}publicstaticfinalclasslayoutpublicstaticfinalint}publicstaticfinalclassstringpublicstaticfinalint}}看到在R.java檔桉中,分別有attr(屬性)、drawable(、圖示)、id(識說,開發工具會根據XML描述檔中指定的id,生成對應的資源,并自動指定一個位址。文件是這么解釋「R.java」的作用的:Aproject'sR.javafileisanindexintoalltheresourcesdefinedinthefile.Youusethisclassinyoursourcecodeasasortofshort-handwaytorefertoresourcesyou'veincludedinyourproject.Thisisparticularlypowerfulwiththe pletionfeaturesofIDEslikeEclipsebecauseitletsyouquicklyandinteractivelylocatethespecificreferenceyou'relookingTheimportantthingtonoticefornowistheinnerclassnamed"layout",anditsmemberfield"main".TheEclipsepluginnoticedthatyouaddedanewXMLlayoutfileandthenregeneratedthisR.javafile.Asyouaddotherresourcestoyourprojectsyou'llseeR.javachangetokeepup.這樣的語法來為某個界面元件提供識別符號,以供程例如,可以用「@+id/height」來為對應供輸入身高數字的EditText元件提供將字串當在res資料夾中新增各種一個XML檔桉或是一張時,開發工具會從res們可以進一步加工的XML描述檔,讓界面更易于。開啟res/values/strings.xml,<?xmlversion="1.0"encoding="utf-<string上面只定義了一個字串「app_name」,用來表示應用程序名稱(在之后講AndroidManifest.xml檔桉時將會用到)。看到表示字串的格式<stringname="strings.xml<?xmlversion="1.0"encoding="utf-<string<stringname="height"<stringname="weight"<stringname="bmi_btn"BMI<stringname="bmi_result"BMI如果再次開啟「R.java」檔,會發現檔桉中的string類別中也自動索引了上面publicstaticfinalclassstringpublicstaticfinalintapp_name=0x7f040000;publicstaticfinalintbmi_btn=0x7f040003;publicstaticfinalintbmi_result=0x7f040004;publicstaticfinalintheight=0x7f040001;publicstaticfinalintweight=0x7f040002;}號]這樣存取string類型的格式,來取代main.xml檔桉中原本寫死的文字敘述。<?xmlversion="1.0"encoding="utf-<LinearLayoutxmlns:android=http://s ><TextViewandroid:layout_width="fill_parent"<EditTextandroid:id="@+id/height"<EditTextandroid:id="@+id/weight"<Buttonandroid:id="@+id/submit"<TextViewandroid:id="@+id/result"<TextViewandroid:id="@+id/suggest"將描述字串集中在「string.xml」中,以后要修改界面時更有彈性了。至此已經完成了BMI應用程序負責「顯示(View)」的部份XML,面都只修改到開發工具幫產生的檔桉,而事實上所有在「res」,「src/values」中建立自己的文字描述檔桉 算出BMI值后將給予的建議文字,完整的檔桉如下:<?xmlversion="1.0"encoding="utf- name="advice_light">你該多吃 name="advice_average">體型 name="advice_heavy">你該打開「R.java」檔,發現「advice_light「advice_average」、「advice_heavy」也已整理進「.java那么接下來,就開始進入到了解Android程序流程的部分吧解讀程序流程 下"Bmi.java"檔桉,Eclipse+Android開發工具已經幫預先建立好了基本的程序邏輯。其預1package2importimport5publicclassBmiextendsActivity/**Calledwhentheactivityiscreated.publicvoidonCreate(BundlesavedInstanceState) 13講比起什么都對稱的XML界面描述檔來說,這個以Java程序語言寫成的檔桉雖然程序直接拆開,分成幾個部份來講解這個"Bmi.java"檔桉的內容:第1行:package空間的原因是程序一旦擴展到擴展到某個大小,程序中的變數名稱、方法名稱、類別名稱難免重複,這時就可以將定義的名稱區隔管理在package下,以避免相互的情形發生。Java的package設計成與檔桉系統結構相對應,如的package設定是"package 3,4importandroid.app.Activity;importandroid.os.Bundle;程序中預設導入了"android.app.Activity"跟"android.os.Bundle"兩個Package,在所有的Android應用程序中都會用到這兩個Package。"import"(導入)是用作導入馬上將學到這兩個Package的用途。Android支援的Package與標準的Java(j2se)不盡相同。在寫Android應用程序APIPackage續章節中也將講解如何透過新增"jar"檔來呼叫額外的Package。完整的API可查閱的package列表 6,13publicclassBmiextendsActivity}第6行開始了程序的主體。其組成是這樣publicclass"Bmi"是這個類別的名稱。"class"則是用作類別關鍵字。"public"關鍵字是用來修飾"Bmi"這個類別。表示"Bmi"是個"公開"的類別,可以從package外部取用。"publicclassBmi"后面再加上"extendsActivity"Bmi"這個類別的"Activity"是來自于在第3行剛導入的Package。因此整句話的含意即:"一個公開的Bmi類別。這個Bmi類別繼承了程序開頭導入的Activity類別"。"{}"大括號規范了一個程序區塊。大括號中的程序表達的這個程序區塊的主要內容。7/**Calledwhentheactivityiscreated.7/**Java其中的文字內容不會被編譯。"/*"敘述后多出來的一個"*"號被視為內文。順便提醒一下,Java程序語言中兩個斜線"http://"表示的是單行注解符號。單行注解符號"http://"與多行注解符號"/**/"不同的地方是,只有與"http://"符號的文字才不會被編譯。8-9,12publicvoidonCreate(BundlesavedInstanceState)}第9行開始了這個方法(Method)的主體。其組成publicvoidonCreate(BundlesavedInstanceState)}onreae"是這個方法的名稱。"vod"則是了這個方法的回傳值的型別(type)"publc"關鍵字是用來修飾"onreae"這個方法。表示"onreae"是個"公開"的方法,可以由bmi類別外部取用。方法的回傳值的型別,即是這個方法的型別。"onCreate"這個方法使用"void"型別,表示"onCreate"這個方法不需回傳值。同時,這個方法傳入了一個名為"saedntanceSae"的"unde"型別參數,"unde"型別正是來自前面所導入的Pakae之一。并不需要知道太多"Bunde"型別或saednsanceSae"實體的細節,只要知道"unde"的內容與平臺的體管理有關。當ndroid應用程序啟動、換到背景等待、關閉時,都會用到"aednsanceae"這個實體來處理體相關的事宜。當然,你也可以用其他名稱來代替它。還好"onreae"這個方法都是傳入"undeaedntanceSae"這個參數,寫應用程序時只要正確照規定傳入即可,你可以不用太去在意它。給對Bundle是什么有的讀者onCreate方法的作用類似(Activity重新初始化)時,會再次呼叫onCreate方法,你就能從savedInstanceState中得到前一次凍結的狀態。也可以透過"Bundle"來將這個Activity的內容傳到下一個Activity中。之后講ActivityonCreate/onFreeze"{}"onCreate這個程序區塊的主要publicvoidonCreate(Bundle從前面的講解中,學到了在任何一個Android專桉 的"android.app"分類,都可以找到"Activity.class"這個類別。現在再深入一些查看"Activity.class"類別。你要做的,只是依照圖示,找到Android工具中的"ReferencedLibraries" ,從"android.app"分類里找到"Activity.class"類別,并按下"Activity.class"類別左側的三角形圖示,如此即可展開這個類別的屬性/Activity類別的屬性/onCreate(Method)事實上,"onCreate"方法正是每個Activity類別初始化時都會去呼叫的方法。"@"開頭的語句表示裝飾子(decorator)語句,"@Override"語句的作用是告訴程序 個"onCreate"方法。當打開程序時,程序不再使用從"bmi"類別中繼承來的"onCreate"publicvoidonCreate(BundlesavedInstanceState)}講解了整段程序,其含意是"覆寫bmi類別中公開的onCreate方法。這個"onCreate"savedInstanceStateBundle型別參數。現在來看看"onCreate"方法中包含的程序內容。10,11"super"是關鍵字。代表著這個"Bmi"類別的上層類別(Activity)。"super.onCreate(savedInstanceStateActivityonCreateAndroid將其應用程序的界面稱為視圖(View),而負責控制各種動作行為的程序主體(Controller),則稱為活動(Activity)。因此一個Android應用程序,必定會對應到一個以上的Activity"onCreate"方法則是每個Activity類別初始化時都會去呼叫的方法。事,是保持原本"onCreate"方法預設的動作,然后在其中加入想而Android產生的程序預設卻覆載(@Override)了"Bmi"類別的"onCreate"方法。原本繼承自"ctity"類別的"onreae"方法,其原本內容都被覆載掉了。因此想將原本的onreae"方法內容保留,并在其中加入的內容的話,就要使用super"語句。當程序運行到覆寫的"onreae"方法時,透過super.onreae(aednsanceSae);"語句,會先將原本"ctity"類別中的"onreae"方法執行一次,然后再執行覆寫的"onreae"方法里面其他的程序內容。要執行原本的"onreae"方法時,仍然需要提供原本"onreae"方法所需的傳入參數。因此"super.onreae(aedntanceae);"語句中,saedntanceSae"這個參數傳入原本的"onreae"函式中。"aednsanceae"是在"publcoidonreae(undeaednsanceae)"語句中所的傳入參數。換顯示到一個螢幕上,Activity會呼叫它用來設View"setContentView"方法,并傳入想的XML描述文件。當Activity被啟動并需要顯示到螢幕上時,系統會通知Activity,并根據的XML文件敘述來描繪出使用者界面。上一章中定義好的res/layout/main.xml描述檔,就是透過這個機制繪出到螢幕上。setContentViewActivity你可能也注意到"setContentView"方法確實是透過"R.layoutmain"來 XML文件描述檔的資源,而不是直接透過res BMI至此,已經完成了bmi程序的界面設計,并且理解了了新建立的程序。剩BMI很幸運的是,BMI程序中用到的并不是什么神秘的演算法,你甚至可以透過搜尋引擎package23import4publicclassBmiextendsActivity/**Calledwhentheactivityiscreated.publicvoidonCreate(BundlesavedInstanceState)setContentView(R.layout//ListenforbuttonButtonbutton= privateOnClickListenercalcBMI=new{publicvoidonClick(View{DecimalFormatnf=newEditTextfieldheight=EditTextfieldweight=doubleheight=doubleweight=doubleBMI=weight/(height*result.setText("YourBMIis"+nf.format(BMI));//GivehealthTextViewfieldsuggest=}else 50會學到:導入其他用到的模組、如何取得界面元件、如何對按鈕設定動作。講//Listenforbuttonjava語言所支援的另一種注解方式。Buttonbutton=buttonfindViewById方法,從資源檔中取得對應的界面元件(按"R.id.submit"XML<Button為了確保的型別跟XML描述檔中描述的界面元件型別一致,好使程序正常,"findViewById""(Button)""button"button.setOnClickListener(new"setOnClickListener"是button(按鈕)實體的方法。EditTextfieldheight=EditTextfieldweight=與上面buton的類似,只是改成EdtText實體,透過fndVewyd方法,從資源檔中取得對應的文字欄位元件。這邊取出的是".d.heiht"和".d.weight"文字欄位元件。doubleheight=Double.parseDouble(fieldheight.getText().toString())/100;doubleweight=Double.parseDouble(fieldweight.getText().toString());doubleBMI=weight/(height*height);BMI值的算法是"體重除以身高的平方"體重(weight)/身高(height)*身高(height)這麼看來,上面的程序碼就很清晰了。先從身高欄位(fieldheight)、體重欄位(fieldweight)(double)型態的變數BMI來運算的結果,因此,BMI變數中了運算出來的實際BMI值。顯示結BMITextViewresult=為了將結果顯示到屏幕上,在之前XML定義檔中已經預留了一個名為"result"的TextView欄位。在程序碼中,再一個TextView實體,透過findViewById方法,DecimalFormatnf=newDecimalFormat("0.00");result.setText("YourBMIis"+nf.format(BMI));透過java內建

溫馨提示

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

評論

0/150

提交評論