




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章Android概述Android應(yīng)用程序開(kāi)發(fā)技術(shù)內(nèi)容安排1.1Android簡(jiǎn)介1.2Android特點(diǎn)1.3本章總結(jié)內(nèi)容安排1.1Android簡(jiǎn)介1.2Android特點(diǎn)1.3本章總結(jié)1.1.1Android釋義與應(yīng)用Android一詞最早出現(xiàn)于法國(guó)作家利爾亞于1886年發(fā)表的科幻小說(shuō)《未來(lái)夏娃》中,他將外表像人的機(jī)器起名為Android。2007年11月5日,Google公司正式發(fā)布Android操作系統(tǒng)。Android操作系統(tǒng)是一款基于Linux內(nèi)核、中間件、應(yīng)用程序框架和應(yīng)用軟件組成的開(kāi)源移動(dòng)操作系統(tǒng),目前仍然由谷歌成立的開(kāi)放手機(jī)聯(lián)盟持續(xù)領(lǐng)導(dǎo)與開(kāi)發(fā)。2008年9月,Google公司正式發(fā)布了Android1.0系統(tǒng),從此,Google公司開(kāi)啟了新的手機(jī)系統(tǒng)輝煌時(shí)代。2013年3月,Android加強(qiáng)了Google的相關(guān)應(yīng)用服務(wù),此時(shí),Android系統(tǒng)不再是一款手機(jī)操作系統(tǒng),而是越來(lái)越廣泛應(yīng)用于平板電腦、可穿戴設(shè)備、電視、數(shù)碼相機(jī)、智能汽車(chē)管理系統(tǒng)等移動(dòng)設(shè)備及物聯(lián)網(wǎng)設(shè)備中。1.1.2Android版本發(fā)布由于涉及版權(quán)問(wèn)題,Android系統(tǒng)在最開(kāi)始發(fā)布時(shí),系統(tǒng)命名將甜點(diǎn)作為系統(tǒng)版本代號(hào),下表為Android發(fā)展過(guò)程中甜點(diǎn)命名與系統(tǒng)版本代號(hào)之間的對(duì)應(yīng)關(guān)系。
甜點(diǎn)版本代號(hào)紙杯蛋糕(Cupcake)Android1.5甜甜圈(Donut)Android1.6松餅(éclair)Android2.0/2.1凍酸奶(Froyo)Android2.2姜餅(Gingerbread)Android2.3蜂巢(Honeycomb)Android3.0冰淇淋三明治(IceCreamSandwich)Android4.0果凍豆(JellyBean)Android4.1和Android4.2奇巧巧克力(KitKat)Android4.4
甜點(diǎn)版本代號(hào)棒棒糖(Lollipop)Android5.0棉花糖(Marshmallow)Android6.0牛軋?zhí)牵∟ougat)Android7.0奧利奧(Oreo)Android8.0派(Pie)Android9.0(續(xù)表)
在2019年9月3日,Google發(fā)布Android10版本。自此版本之后Android不再使用甜點(diǎn)來(lái)命名,之后依次發(fā)布了Android11版本、Android12開(kāi)發(fā)預(yù)覽版本、Android12版本與2022年的Android13版本。每次一的版本更新相較于之前都有了不同程度的改進(jìn)。內(nèi)容安排1.1Android簡(jiǎn)介1.2Android特點(diǎn)1.3本章總結(jié)1.2.1Android系統(tǒng)架構(gòu)
從上層到底層共包括四層,分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和Linux內(nèi)核層。采用分層架構(gòu)的思想1.2.2Android四大組件Android四大組件分別為Activity、Service、ContentProvider、BroadcastReceiver。Activity:是一種展示型組件,用于向用戶(hù)直接展示一個(gè)界面,并且可以接收用戶(hù)的輸入信息從而進(jìn)行交互。Activity組件的主要作用是展示一個(gè)界面并和用戶(hù)交互,扮演的是一種前臺(tái)界面的角色。Service:是一種計(jì)算型組件,用于在后臺(tái)執(zhí)行一系列計(jì)算任務(wù)。Service組件有兩種狀態(tài):?jiǎn)?dòng)狀態(tài)和綁定狀態(tài)。當(dāng)服務(wù)處于啟動(dòng)狀態(tài)時(shí),Service內(nèi)部可以做一些后臺(tái)計(jì)算,并且不需要和外界有直接的交互。當(dāng)Service處于綁定狀態(tài)時(shí)服務(wù)內(nèi)部同樣進(jìn)行后臺(tái)計(jì)算,但是處于這種狀態(tài)時(shí)外界可以很方便地和Service組件進(jìn)行通信。ContentProvider:一種數(shù)據(jù)共享型組件,用于向其它組件和其它應(yīng)用共享數(shù)據(jù)。Android平臺(tái)提供了ContentProvider,使一個(gè)應(yīng)用程序可以把指定的數(shù)據(jù)集提供給其它應(yīng)用程序,其它應(yīng)用程序通過(guò)ContentResolver從該內(nèi)容提取器種獲取或存入數(shù)據(jù)。BroadcastReceiver:是一種消息型組件,用于在不同的組件或者不同的應(yīng)用之間傳遞消息。BroadcastReceiver的注冊(cè)方式有兩種:靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)。在實(shí)際開(kāi)發(fā)中通過(guò)Context的一系類(lèi)send()方法來(lái)發(fā)送廣播,被發(fā)送的廣播會(huì)被系統(tǒng)發(fā)送給感興趣的廣播接收者,發(fā)送和接收過(guò)程的匹配通過(guò)廣播接收者來(lái)描述。1.2.3Android平臺(tái)特性應(yīng)用程序框架支持組件的重用與替換。Dalvik虛擬機(jī)專(zhuān)門(mén)為移動(dòng)設(shè)備進(jìn)行了優(yōu)化。相對(duì)于Java虛擬機(jī)速度要快很多。內(nèi)部集成瀏覽器基于開(kāi)源的WebKit引擎。有了內(nèi)置的瀏覽器,優(yōu)化的圖形庫(kù)包括2D和3D圖形庫(kù),3D圖形庫(kù)基于OpenGL。SQLite用作結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)。多媒體支持包括常見(jiàn)的音頻、視頻和靜態(tài)影像文件格式如MPEG4、H.264、MP3、AAC、AMR、JGP、PNG、GIF。藍(lán)牙(Bluetooth)、EDGE、3G、WiFi(依賴(lài)于硬件)。照相機(jī)、GPS、指南針和加速度計(jì)(依賴(lài)于硬件)。豐富的開(kāi)發(fā)環(huán)境包括設(shè)備模擬器、調(diào)試工具、內(nèi)存及性能分析圖表和集成的開(kāi)發(fā)環(huán)境插件。Google提供了Android開(kāi)發(fā)包SDK,其中包含了大量的類(lèi)庫(kù)和開(kāi)發(fā)工具。1.2.4Android平臺(tái)的優(yōu)勢(shì)開(kāi)放性豐富的硬件選擇。豐富的硬件選擇。無(wú)縫結(jié)合的Google應(yīng)用。軟件推廣相對(duì)容易軟件開(kāi)發(fā)技術(shù)內(nèi)容安排1.1Android簡(jiǎn)介1.2Android特點(diǎn)1.3本章總結(jié)本章分別從Android的釋義與應(yīng)用、Android版本的發(fā)布?xì)v史、Android的系統(tǒng)架構(gòu)、組件及平臺(tái)特性,較為全面地向?qū)W習(xí)者介紹了Android系統(tǒng)。通過(guò)對(duì)Android的系統(tǒng)架構(gòu)、組件及平臺(tái)特性的學(xué)習(xí),有助于學(xué)習(xí)者理解應(yīng)用項(xiàng)目開(kāi)發(fā)設(shè)計(jì)。1.3本章總結(jié)第2章AndroidStudio使用入門(mén)Android應(yīng)用程序開(kāi)發(fā)技術(shù)內(nèi)容安排2.1AndroidStudio環(huán)境配置2.2運(yùn)行第一個(gè)Android程序2.3Android項(xiàng)目結(jié)構(gòu)目錄2.4
AndroidManifest.xml清單文件2.5AndroidStudio日志工具的使用2.6本章總結(jié)
內(nèi)容安排
2.1AndroidStudio環(huán)境配置2.2運(yùn)行第一個(gè)Android程序2.3Android項(xiàng)目結(jié)構(gòu)目錄2.4
AndroidManifest.xml清單文件2.5AndroidStudio日志工具的使用2.6本章總結(jié)
2.1.1Windows下配置Java環(huán)境安裝
Java開(kāi)發(fā)工具包(JDK)從
Oracle的Java網(wǎng)站:JDKJavaSE下載最新版本的
Java。創(chuàng)建JAVA_HOME變量通常JDK文件夾所在路徑比較長(zhǎng),難以書(shū)寫(xiě),也難以記憶,使用自定義系統(tǒng)變量JAVA_HOME來(lái)代替。設(shè)置Path變量在Path變量中添加JDK的bin路徑。在系統(tǒng)變量列表中找到Path變量,選擇Path變量,單擊“編輯”按鈕,在“編輯環(huán)境變量”對(duì)話(huà)框中添加“%JAVA-HOME\bin”。2.1.1Windows下配置Java環(huán)境設(shè)置CLASSPATH變量在系統(tǒng)變量列表里查看CLASSPATH變量,如果不存在,則新建變量CLASSPATH,若存在則選中該變量,單擊“編輯”按鈕,在“編輯系統(tǒng)變量”的“變量值”文本框添加“.;%JAVA_HOME%\lib
;%JAVA_HOME%\lib\tools.jar;”。2.1.1Windows下配置Java環(huán)境2.1.1Windows下配置Java環(huán)境測(cè)試變量配置情況
完成以上三項(xiàng)配置,需要測(cè)試一下這三個(gè)變量設(shè)置是否成功,方法是在命令行狀態(tài)提示符后邊鍵入命令“javac”,然后按Enter鍵,若出現(xiàn)如圖所示,則說(shuō)明配置成功。2.1.2Windows下配置AndroidStudio環(huán)境Android
Studio的安裝Android
Studio的下載地址為/studio下載SDK和GradleSDK是Android開(kāi)發(fā)必備的資源包,下載Android
Studio新版本一般會(huì)自動(dòng)下載最新版本的Android
SDK和最新的Gradle的匹配版本。內(nèi)容安排2.1AndroidStudio環(huán)境配置
2.2運(yùn)行第一個(gè)Android程序2.3Android項(xiàng)目結(jié)構(gòu)目錄2.4
AndroidManifest.xml清單文件2.5AndroidStudio日志工具的使用2.6本章總結(jié)
2.2.1新建一個(gè)Android項(xiàng)目點(diǎn)擊歡迎界面中的新建項(xiàng)目按鈕即可開(kāi)啟創(chuàng)建Android應(yīng)用工程2.2.1新建一個(gè)Android項(xiàng)目此頁(yè)面選擇默認(rèn)的創(chuàng)建手機(jī)應(yīng)用程序的Empty
Activity模板,然后點(diǎn)擊Next按鈕2.2.1新建一個(gè)Android項(xiàng)目配置新項(xiàng)目的項(xiàng)目名、包名、存儲(chǔ)位置、開(kāi)發(fā)語(yǔ)言、允許運(yùn)行的最低SDK版本等信息2.2.1新建一個(gè)Android項(xiàng)目安裝并同步更新Gradle首次進(jìn)入Android
Studio,IDE系統(tǒng)會(huì)自動(dòng)在網(wǎng)絡(luò)上查找并下載與當(dāng)前Android
Studio版本相匹配的最新Gradle版本,然后同步Gradle配置。如果沒(méi)有聯(lián)網(wǎng),則需要下載和同步Gradle。連接網(wǎng)址/distributions/,下載指定的壓縮包。查看AndroidStudio對(duì)應(yīng)的Gradle版本可通過(guò)選擇IDL中的File->ProjectStructure查看。本書(shū)使用的AndroidStudio版本為Gradle7.0.2。2.2.1新建一個(gè)Android項(xiàng)目同步項(xiàng)目重新啟動(dòng)Android
Studio,依次選擇菜單File->SyncProjectwithGradleFiles即可完成項(xiàng)目與Gradle的更新。若Android
studio版本與Gradle版本不一致,則可能導(dǎo)致項(xiàng)目無(wú)法執(zhí)行等問(wèn)題的出現(xiàn)。介紹Android
Studio自帶的模擬器創(chuàng)建過(guò)程。在Android
studio的工具欄上有AVD
Manager按鈕。單擊AVD
Manager按鈕進(jìn)入AVD管理對(duì)話(huà)框。如果已經(jīng)創(chuàng)建了AVD,則會(huì)出現(xiàn)AVD列表。首次進(jìn)入AVD管理對(duì)話(huà)框。2.2.1新建一個(gè)Android項(xiàng)目單擊+Create
Virtual
Device按鈕,創(chuàng)建AVD,按照如下圖片順序進(jìn)行操作。選擇設(shè)備參數(shù)2.2.1新建一個(gè)Android項(xiàng)目確定配置參數(shù)選擇系統(tǒng)圖片2.2.1新建一個(gè)Android項(xiàng)目顯示虛擬設(shè)備虛擬設(shè)備創(chuàng)建完成2.2.1新建一個(gè)Android項(xiàng)目2.2.2Android
StudioIDE界面菜單欄區(qū)Android
StudioIDE就是Android
Studio集成開(kāi)發(fā)環(huán)境,可分為菜單欄區(qū)、工具欄按鈕區(qū)、項(xiàng)目及資源管理區(qū)、編輯工作區(qū)、狀態(tài)信息區(qū)和Gradle及設(shè)備文件管理區(qū)。工具欄按鈕區(qū)項(xiàng)目及資源管理區(qū)主要是展示項(xiàng)目目錄結(jié)構(gòu)及文件資源的管理區(qū)域2.2.2Android
StudioIDE界面編輯工作區(qū)這個(gè)區(qū)域主要是用來(lái)編寫(xiě)代碼和設(shè)計(jì)布局的相關(guān)編輯工作區(qū)域。2.2.2Android
StudioIDE界面狀態(tài)信息區(qū)這個(gè)區(qū)域位于軟件的底部,主要用于查看項(xiàng)目運(yùn)行時(shí)的相關(guān)動(dòng)態(tài)輸出信息。2.2.2Android
StudioIDE界面Gradle及設(shè)備文件管理區(qū)在軟件的右側(cè)上、下兩端有些標(biāo)簽,在開(kāi)發(fā)時(shí)會(huì)用到。其中Gradle是Gradle控制臺(tái),顯示Gradle構(gòu)建應(yīng)用程序時(shí)的一些輸出信息。2.2.2Android
StudioIDE界面2.2.3運(yùn)行程序運(yùn)行程序Android
Studio
IDE運(yùn)行程序可以使用以下三種方式:1)點(diǎn)擊菜單Run->Run;2)使用工具欄按鈕,點(diǎn)擊。3)使用快捷鍵Shift+F10。以Hello_Android為例,運(yùn)行成功后可查看程序在虛擬機(jī)上的運(yùn)行狀態(tài)。Android應(yīng)用的簽名Android系統(tǒng)要求所有的應(yīng)用都必須要有數(shù)字證書(shū)簽名。數(shù)字應(yīng)用簽名有兩個(gè)作用:1)確定發(fā)布者的身份信息;2)保證應(yīng)用的完整性。
創(chuàng)建數(shù)字簽名。依次選擇菜單Build->GenerateSignedBundle/APK…,進(jìn)入對(duì)話(huà)框。在此選擇APK選項(xiàng),單擊進(jìn)入模塊所使用的數(shù)字證書(shū)頁(yè)。2.2.3運(yùn)行程序假設(shè)目前沒(méi)有任何數(shù)字證書(shū),則單擊Create
new...按鈕進(jìn)入下一頁(yè)對(duì)話(huà)框,在File
name后的輸入框輸入文件名,在Key
store
path后的輸入框內(nèi)單擊文件夾圖標(biāo),為即將創(chuàng)建的數(shù)字證書(shū)指定存儲(chǔ)位置,點(diǎn)擊OK按鈕,進(jìn)入設(shè)置。選擇數(shù)字證書(shū)2.2.3運(yùn)行程序新建數(shù)字證書(shū)生成數(shù)字證書(shū)2.2.3運(yùn)行程序3.應(yīng)用項(xiàng)目打包AndroidStudioIDE安裝在PC端,使用該IDE編譯好項(xiàng)目后,需要完成打包發(fā)布后項(xiàng)目才能在Android端運(yùn)行。打包設(shè)置說(shuō)明:在生成.apk時(shí),需要指定輸出路徑、創(chuàng)建類(lèi)型和簽署版本。創(chuàng)建類(lèi)型。創(chuàng)建類(lèi)型包括Debug和Release版本。Debug版本又稱(chēng)為測(cè)試版,包含測(cè)試和日志信息,沒(méi)有進(jìn)行優(yōu)化加密,適合程序調(diào)試過(guò)程中使用。Release版本又稱(chēng)為發(fā)布版,是對(duì)外發(fā)布供用戶(hù)使用,進(jìn)行了優(yōu)化加密。簽署版本。
V1版本(Jar
Signature):僅驗(yàn)證未解壓的文件內(nèi)容,這樣APK簽署后可進(jìn)行很多修改,可以移動(dòng)甚至重新壓縮文件。
V2版本(FULL
APK
Signature):驗(yàn)證壓縮文件的所有字節(jié),在簽名后無(wú)法再更改。2.2.3運(yùn)行程序2.2.4項(xiàng)目組成Android應(yīng)用項(xiàng)目主要由三個(gè)部分組成:應(yīng)用項(xiàng)目源代碼各種資源用項(xiàng)目標(biāo)書(shū)清單文件AndroidManifest.xml內(nèi)容安排2.1AndroidStudio環(huán)境配置2.2運(yùn)行第一個(gè)Android程序
2.3Android項(xiàng)目結(jié)構(gòu)目錄2.4
AndroidManifest.xml清單文件2.5AndroidStudio日志工具的使用2.6本章總結(jié)
2.3Android項(xiàng)目結(jié)構(gòu)目錄Hello_Android項(xiàng)目為例,其項(xiàng)目目錄下主要包括4個(gè)子目錄、8個(gè)文件和一個(gè)外部依賴(lài)庫(kù)。.gradle和.idea目錄app目錄Gradle.gitinore文件build.gradle文件gradle.properties文件gradlew和gradlew.bat文件local.properties文件My_Keystone.jks文件Settings.gradleExternal
Libraries目錄內(nèi)容安排2.1AndroidStudio環(huán)境配置2.2運(yùn)行第一個(gè)Android程序2.3Android項(xiàng)目結(jié)構(gòu)目錄
2.4
AndroidManifest.xml清單文件2.5AndroidStudio日志工具的使用2.6本章總結(jié)
2.4AndroidManifest.xml清單文件AndroidManifest.xml是整個(gè)項(xiàng)目的清單文件,或者又被稱(chēng)之為配置文件,當(dāng)新創(chuàng)建一個(gè)應(yīng)用項(xiàng)目時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建該文件,存放在項(xiàng)目的app/src/main目錄下。AndroidManifest.xml文件可向Android系統(tǒng)提供應(yīng)用的必要信息,系統(tǒng)必須具有這些信息才可以運(yùn)行。內(nèi)容安排2.1AndroidStudio環(huán)境配置2.2運(yùn)行第一個(gè)Android程序2.3Android項(xiàng)目結(jié)構(gòu)目錄2.4
AndroidManifest.xml清單文件
2.5AndroidStudio日志工具的使用2.6本章總結(jié)
2.5.1Logcat在Android項(xiàng)目中如果想查看日志,一般使用Logcat。單擊Android
Studio最下方狀態(tài)欄中的Logcat,則會(huì)出現(xiàn)Logcat界面。2.5.2DDMS
DDMS的全稱(chēng)是DalvikDebugMonitorService,是Android開(kāi)發(fā)環(huán)境中的Dalvik虛擬機(jī)調(diào)試監(jiān)控服務(wù)。提供測(cè)試設(shè)備截屏、查看特定進(jìn)程正在運(yùn)行的線程以及堆信息、Logcat、廣播狀態(tài)信息、模擬電話(huà)呼叫、模擬接收及發(fā)送SMS、虛擬地理坐標(biāo)等服務(wù)。具體查看方式是:在Android
Studio中查看AS的SDK路徑。2.5.2DDMS啟動(dòng)DDMS。進(jìn)入到D:\SDK\tools目錄下,找到monitor.bat批量處理文件。2.5.2DDMS鼠標(biāo)左鍵雙擊monitor.bat批量處理文件,會(huì)出現(xiàn)類(lèi)似cmd的輸入面板,然后會(huì)迅速自動(dòng)關(guān)閉。再等幾秒鐘會(huì)出現(xiàn)DDMS面板。2.5.2DDMS內(nèi)容安排2.1AndroidStudio環(huán)境配置2.2運(yùn)行第一個(gè)Android程序2.3Android項(xiàng)目結(jié)構(gòu)目錄2.4
AndroidManifest.xml清單文件2.5AndroidStudio日志工具的使用
2.6本章總結(jié)
2.6本章總結(jié)本章詳細(xì)介紹了基于Windows平臺(tái)的AndroidStudio安裝及環(huán)境配置的具體流程。以“Hello_Android”為例,有助于學(xué)習(xí)者掌握一個(gè)項(xiàng)目的創(chuàng)建及運(yùn)行步驟、Android
Studio
IDE界面結(jié)構(gòu)、Android應(yīng)用程序項(xiàng)目組成和項(xiàng)目結(jié)構(gòu)目錄。通過(guò)學(xué)習(xí)AndroidManifest.xml清單文件和Android
Studio的日志工具有助于學(xué)習(xí)者進(jìn)一步了解AndroidStudio開(kāi)發(fā)環(huán)境。通過(guò)本章的學(xué)習(xí)有助于初次學(xué)習(xí)者更快掌握Android
Studio的使用。上機(jī)安裝AndroidStudio開(kāi)發(fā)環(huán)境,并記錄安裝配置過(guò)程及所遇到的問(wèn)題。創(chuàng)建并運(yùn)行Hello_Android程序(展示不少于兩臺(tái)AVD的運(yùn)行效果)。打包并發(fā)布Hello_Android程序(展示在真機(jī)上的運(yùn)行效果)。
第3章Activity和ApplicationAndroid應(yīng)用程序開(kāi)發(fā)技術(shù)內(nèi)容安排3.1Activity基本概念3.2運(yùn)行狀態(tài)及生命周期3.3Android的資源管理3.4Application基本概念3.5本章總結(jié)
內(nèi)容安排
3.1Activity基本概念3.2運(yùn)行狀態(tài)及生命周期3.3Android的資源管理3.4Application基本概念3.5本章總結(jié)
3.1Application基本概念A(yù)ctivity是Android最基本也是最為常見(jiàn)的組件。Activity提供用戶(hù)與Android系統(tǒng)交互的接口,用戶(hù)通過(guò)Activity來(lái)完成自己的目的。一個(gè)Android應(yīng)用程序通常由多個(gè)Activity組成,但是其中只有一個(gè)為主Activity,Android應(yīng)用程序中的多個(gè)Activity可以直接相互調(diào)用以完成不同工作。啟動(dòng)一個(gè)Activity有三種方法。1)第一種方法是在OnCreate()方法內(nèi)調(diào)用setContentView()方法,用來(lái)指定將要啟動(dòng)的res/layout目錄下的布局文件。2)第二種方法是調(diào)用startActivity(),用于啟動(dòng)一個(gè)新的Activity。3)第三種方法是調(diào)用startActivityforResult(),用于啟動(dòng)一個(gè)Activity,并在該Activity結(jié)束時(shí)返回信息。返回一個(gè)Activity也有三種方法。1)第一種是調(diào)用finish()方法來(lái)關(guān)閉。2)第二種是可選擇調(diào)用setResult()返回?cái)?shù)據(jù)給上一級(jí)的Activity。3)第三種是當(dāng)使用startActivityforResult()啟動(dòng)Activity時(shí),則需要調(diào)用finishActivity()方法關(guān)閉其父Activity。3.1Application基本概念內(nèi)容安排3.1Activity基本概念
3.2運(yùn)行狀態(tài)及生命周期3.3Android的資源管理3.4Application基本概念3.5本章總結(jié)
3.2運(yùn)行狀態(tài)及生命周期應(yīng)用項(xiàng)目進(jìn)程從創(chuàng)建到結(jié)束的全過(guò)程稱(chēng)之為應(yīng)用項(xiàng)目的生命周期。Android應(yīng)用項(xiàng)目的生命周期是由Android框架進(jìn)行管理,而不是由應(yīng)用項(xiàng)目直接控制。
本章以Activity組件為例,說(shuō)明Android系統(tǒng)如何管理程序組件的生命周期Activity在生命周期中共存在三個(gè)狀態(tài),這三個(gè)狀態(tài)如下:1.運(yùn)行態(tài):指Activity運(yùn)行于屏幕的最上層并且獲得了用戶(hù)焦點(diǎn)。2.暫停態(tài):指當(dāng)前Activity依然存在,但是沒(méi)有獲得用戶(hù)焦點(diǎn)。處于暫停態(tài)的Activity保留了自己所使用的內(nèi)存和用戶(hù)信息,但是在系統(tǒng)極度缺乏資源的情況下,有可能會(huì)被終止以釋放資源。3.停止態(tài):指當(dāng)前Activity完全被處于運(yùn)行態(tài)的Activity遮擋住,其用戶(hù)界面完全不能被用戶(hù)看見(jiàn)。處于停止態(tài)的Activity依然存活,也保留了自己所使用的內(nèi)存和用戶(hù)信息,但是一旦系統(tǒng)缺乏資源,停止態(tài)的Activity就會(huì)被終止以釋放資源。3.2.1
Activity運(yùn)行狀態(tài)如圖為Activity生命周期中方法的調(diào)用過(guò)程。3.2.2Activity生命周期Activity的生命周期表現(xiàn)在三個(gè)層面。如果Activity離開(kāi)可見(jiàn)階段,長(zhǎng)時(shí)間失去焦點(diǎn),就很可能被系統(tǒng)銷(xiāo)毀以釋放資源。當(dāng)然,即使該Activity被銷(xiāo)毀掉,用戶(hù)對(duì)該Activity所做的更改也會(huì)被保存在Bundle對(duì)象中,當(dāng)用戶(hù)需要重新顯示該Activity時(shí),Android系統(tǒng)會(huì)根據(jù)之前保存的用戶(hù)更改信息將該Activity重建。3.2.2Activity生命周期Activity在生命周期中從一種狀態(tài)到另一種狀態(tài)時(shí)會(huì)激發(fā)相應(yīng)的回調(diào)方法。名稱(chēng)調(diào)用時(shí)間onCreate(BundlesavedInstanceState)創(chuàng)建Activity時(shí)調(diào)用。設(shè)置在該方法中,還以Bundle的形式提供對(duì)以前儲(chǔ)存的任何狀態(tài)的訪問(wèn)。其中參數(shù)savedInstanceState對(duì)象是用于保存Activity的對(duì)象的狀態(tài)。onStart()Activity變?yōu)樵谄聊簧蠈?duì)用戶(hù)可見(jiàn)時(shí)調(diào)用。onResume()Activity開(kāi)始與用戶(hù)交互時(shí)調(diào)用(無(wú)論是啟動(dòng)還是重啟一個(gè)活動(dòng),該方法總是被調(diào)用)。onPause()當(dāng)Android系統(tǒng)要激活其他Activity時(shí),該方法被調(diào)用,暫停或收回CPU和其他資源時(shí)調(diào)用。3.2.2Activity生命周期(續(xù)表)名稱(chēng)調(diào)用時(shí)間onStop()Activity被停止并轉(zhuǎn)為不可見(jiàn)階段時(shí)調(diào)用。onRestart()重新啟動(dòng)已經(jīng)停止的Activity時(shí)調(diào)用。onDestroy()Activity被完全從系統(tǒng)內(nèi)存中移除時(shí)調(diào)用。該方法被調(diào)用可能是因?yàn)橛腥酥苯诱{(diào)用finish()方法或者系統(tǒng)決定停止該活動(dòng)以釋放資源。3.2.2Activity生命周期上面7個(gè)生命周期方法分別在4個(gè)階段按著一定的順序進(jìn)行調(diào)用,這4個(gè)階段如下:?jiǎn)?dòng)Activity:在這個(gè)階段依次執(zhí)行3個(gè)生命周期方法。分別是onCreate()、onStart()和onResume()。Activity失去焦點(diǎn):如果在Activity獲得焦點(diǎn)的情況下進(jìn)入其它的Activity或應(yīng)用程序,這時(shí)當(dāng)前的Activity會(huì)失去焦點(diǎn)。在這一階段,會(huì)依次執(zhí)行onPause()和onStop()方法。Activity重獲焦點(diǎn):如果Activity重新獲得焦點(diǎn),會(huì)依次執(zhí)行3個(gè)生命周期方法。分別是onRestart()、onStart()和onResume()。關(guān)閉Activity當(dāng)Activity被關(guān)閉時(shí),系統(tǒng)會(huì)依次執(zhí)行3個(gè)生命周期方法。分別是onPause()、onStop()和onDestroy()。3.2.2Activity生命周期android:noHistory當(dāng)用戶(hù)離開(kāi)
Activity并且其在屏幕上不再可見(jiàn)時(shí),是否應(yīng)從Activity堆棧中將其移除并完成(調(diào)用其finish()方法)。“true”表示應(yīng)將其完成,“false”表示不應(yīng)將其完成。android:allowEmbedded嵌入式子項(xiàng)啟動(dòng)。表示該
Activity可作為另一Activity的嵌入式子項(xiàng)啟動(dòng)。android:alwaysRetainTaskState保留視圖內(nèi)容不被系統(tǒng)清除。系統(tǒng)是否始終保持
Activity所在任務(wù)的狀態(tài)?!皌rue”表示保持,“false”表示允許系統(tǒng)在特定情況下將任務(wù)重置到其初始狀態(tài)。android:clearTaskOnLaunch重新啟動(dòng)任務(wù)時(shí)根除。是否每當(dāng)從主屏幕重新啟動(dòng)任務(wù)時(shí)都從中移除根
Activity之外的所有Activity。“true”表示始終將任務(wù)清除到只剩其根
Activity;“false”表示不做清除。
默認(rèn)值為“false”。3.2.3Activity屬性android:autoRemoveFromRecents從瀏覽記錄中剔除,讓用戶(hù)不能從瀏覽記錄中切換到本程序(不會(huì)KILL掉進(jìn)程)。android:excludeFromRecents官方定義是否應(yīng)將該
Activity啟動(dòng)的任務(wù)排除在最近使用的應(yīng)用列表(即概覽屏幕)之外。即當(dāng)該
Activity是新任務(wù)的根Activity時(shí),此屬性確定任務(wù)是否應(yīng)出現(xiàn)在最近使用的應(yīng)用列表中。如果應(yīng)將任務(wù)排除在列表之外,則設(shè)置
“true”;如果應(yīng)將其包括在內(nèi),則設(shè)置“false”。
默認(rèn)值為“false”。android:exported是否允許別人的程序調(diào)用本程序的Activity。官方定義Activity是否可由其它應(yīng)用的組件啟動(dòng)
?!皌rue”表示可以,“false”表示不可以。若為“false”,則
Activity只能由同一應(yīng)用的組件或使用同一用戶(hù)ID的不同應(yīng)用啟動(dòng)。3.2.3Activity屬性android:finishOnTaskLaunch官方定義每當(dāng)用戶(hù)再次啟動(dòng)其任務(wù)(在主屏幕上選擇任務(wù))時(shí),是否應(yīng)關(guān)閉(完成)現(xiàn)有
Activity實(shí)例—“true”表示應(yīng)關(guān)閉,“false”表示不應(yīng)關(guān)閉。
默認(rèn)值為“false”。android:screenOrientationActivity在屏幕上的顯示方向。android:theme定義
Activity總體主題樣式資源。android:windowSoftInputModeActivity的主窗口與包含屏幕軟鍵盤(pán)的窗口的交互方式。3.2.3Activity屬性【例3-1】創(chuàng)建登錄Activity,登錄界面如圖所示。
登錄按鈕實(shí)現(xiàn)跳轉(zhuǎn)到下一個(gè)界面,并且判斷輸入的賬號(hào)、密碼是否符合規(guī)則(不為空),提示,登陸成功或失敗。注冊(cè)按鈕實(shí)現(xiàn)跳轉(zhuǎn)到注冊(cè)界面。3.2.4實(shí)現(xiàn)Android登錄的示例代碼打開(kāi)AndroidStudio創(chuàng)建一個(gè)項(xiàng)目,項(xiàng)目名稱(chēng)定義為ActivityDemo,包名為xsyu.jsj.samp3_1的空白工程。創(chuàng)建Activity。點(diǎn)擊File/New->Activity->EmptyActivity,彈出NewAndroidActivity對(duì)話(huà)框,命名為MainActivity。3.2.4實(shí)現(xiàn)Android登錄的示例代碼LoginActivity.java主要代碼為:3.2.4實(shí)現(xiàn)Android登錄的示例代碼Activity_login.xml主要代碼為:3.2.4實(shí)現(xiàn)Android登錄的示例代碼登錄功能,跳轉(zhuǎn)顯示頁(yè)面登錄。Success.java主要代碼為:3.2.4實(shí)現(xiàn)Android登錄的示例代碼activity_success.xml主要代碼為:3.2.4實(shí)現(xiàn)Android登錄的示例代碼運(yùn)行結(jié)果如圖:(a)登錄界面
(b)跳轉(zhuǎn)界面3.2.4實(shí)現(xiàn)Android登錄的示例代碼內(nèi)容安排3.1Activity基本概念3.2運(yùn)行狀態(tài)及生命周期
3.3Android的資源管理3.4Application基本概念3.5本章總結(jié)
3.3Android資源管理通過(guò)點(diǎn)擊Android
Studio中左側(cè)樹(shù)狀結(jié)構(gòu)圖中的res,可進(jìn)行Android項(xiàng)目的資源管理。若未出現(xiàn)在res中,則可在res下創(chuàng)建Folder,然后新建資源。3.3Android資源管理大體上android資源種類(lèi)有11類(lèi),其分類(lèi)與訪問(wèn)方式如下表。3.3.1分類(lèi)與訪問(wèn)方式animator用于定義屬性動(dòng)畫(huà)的XML文件。R.anim
類(lèi)訪問(wèn)anim用于定義漸變動(dòng)畫(huà)的XML文件。(屬性動(dòng)畫(huà)也可保存在此目錄中,但為了區(qū)分這兩種類(lèi)型,屬性動(dòng)畫(huà)首選
animator/
目錄。)通過(guò)
R.anim
類(lèi)訪問(wèn)color用于定義顏色狀態(tài)列表的XML文件R.color
類(lèi)訪問(wèn)drawable位圖文件(.png、.9.png、.jpg、.gif)或編譯為以下可繪制對(duì)象資源子類(lèi)型的XML文件:位圖文件、九宮格(可調(diào)整大小的位圖)、狀態(tài)列表、形狀、動(dòng)畫(huà)可繪制對(duì)象、其他可繪制對(duì)象R.drawable
類(lèi)訪問(wèn)(續(xù)表)mipmap適用于不同啟動(dòng)器圖標(biāo)密度的可繪制對(duì)象文件
layout用于定義用戶(hù)界面布局的XML文件R.layout
類(lèi)訪問(wèn)menu用于定義應(yīng)用菜單(如選項(xiàng)菜單、上下文菜單或子菜單)的XML文件R.menu
類(lèi)訪問(wèn)raw需以原始形式保存的任意文件。如要使用原始
InputStream
打開(kāi)這些資源,請(qǐng)使用資源ID(即
R.raw.filename)調(diào)用
Resources.openRawResource()。但是,如需訪問(wèn)原始文件名和文件層次結(jié)構(gòu),則可以考慮將某些資源保存在
assets/
目錄(而非
res/raw/)下。assets/
中的文件沒(méi)有資源ID,因此您只能使用
AssetManager
讀取這些文件。3.3.1分類(lèi)與訪問(wèn)方式(續(xù)表)values包含字符串、整型數(shù)和顏色等簡(jiǎn)單值的XML文件。其他
res/
子目錄中的XML資源文件會(huì)根據(jù)XML文件名定義單個(gè)資源,而
values/
目錄中的文件可描述多個(gè)資源。對(duì)于此目錄中的文件,<resources>
元素的每個(gè)子元素均會(huì)定義一個(gè)資源。例如,<string>
元素會(huì)創(chuàng)建
R.string
資源,<color>
元素會(huì)創(chuàng)建
R.color
資源。由于每個(gè)資源均使用自己的XML元素進(jìn)行定義,因此您可以隨意命名文件,并在某個(gè)文件中放入不同的資源類(lèi)型。但是,您可能需要將獨(dú)特的資源類(lèi)型放在不同的文件中,使其一目了然。例如,對(duì)于可在此目錄中創(chuàng)建的資源,下面給出了相應(yīng)的文件名約定:arrays.xml:資源數(shù)組(類(lèi)型數(shù)組)。colors.xml:顏色值。dimens.xml:尺寸值。strings.xml:字符串值。styles.xml:樣式。R.string、R.array
和
R.plurals
類(lèi)訪問(wèn)xml可在運(yùn)行時(shí)通過(guò)調(diào)用
Resources.getXML()
讀取的任意XML文件。各種XML配置文件(如可搜索配置)都必須保存在此處
3.3.1分類(lèi)與訪問(wèn)方式(續(xù)表)font帶有擴(kuò)展名的字體文件(如
.ttf、.otf
或
.ttc),或包含
<font-family>
元素的XML文件。如需詳細(xì)了解作為資源的字體,請(qǐng)參閱
XML中的字體。通過(guò)
R.font
類(lèi)訪問(wèn)values包含字符串、整型數(shù)和顏色等簡(jiǎn)單值的XML文件。其他
res/
子目錄中的XML資源文件會(huì)根據(jù)XML文件名定義單個(gè)資源,而
values/
目錄中的文件可描述多個(gè)資源。對(duì)于此目錄中的文件,<resources>
元素的每個(gè)子元素均會(huì)定義一個(gè)資源。例如,<string>
元素會(huì)創(chuàng)建
R.string
資源,<color>
元素會(huì)創(chuàng)建
R.color
資源。由于每個(gè)資源均使用自己的XML元素進(jìn)行定義,因此您可以隨意命名文件,并在某個(gè)文件中放入不同的資源類(lèi)型。但是,您可能需要將獨(dú)特的資源類(lèi)型放在不同的文件中,使其一目了然。例如,對(duì)于可在此目錄中創(chuàng)建的資源,下面給出了相應(yīng)的文件名約定:arrays.xml:資源數(shù)組(類(lèi)型數(shù)組)。colors.xml:顏色值。dimens.xml:尺寸值。strings.xml:字符串值。styles.xml:樣式。R.string、R.array
和
R.plurals
類(lèi)訪問(wèn)3.3.1分類(lèi)與訪問(wèn)方式字符串資源為應(yīng)用提供具有可選文本樣式和格式設(shè)置的文本字符串。共有三種類(lèi)型的資源可為應(yīng)用提供字符串:String提供單個(gè)字符串的
XML資源。StringArray提供字符串?dāng)?shù)組的
XML資源。QuantityStrings(Plurals)帶有用于多元化的不同字符串的
XML資源。3.3.2
strings.xml文本資源文件定義字符串和數(shù)值在string.xml中定義字符串資源,代碼如下。
定義字符串?dāng)?shù)組在strings.xml定義如下代碼:3.3.2
strings.xml文本資源文件打開(kāi)colors.xml文件,可添加顏色命名,代碼如下。3.3.3colors.xml顏色設(shè)置資源文件dimens.xml用來(lái)定義控件的尺寸和文字的大小,便于做屏幕適配。3.3.4dimens.xml尺寸定義資源文件首先按照如圖所示創(chuàng)建dimens.xml文件。定義控件尺寸布局設(shè)置button控件尺寸。要求布局中l(wèi)ayout_width和layout_height值設(shè)置為wrap_content,否則dimen定義無(wú)效。3.3.4dimens.xml尺寸定義資源文件設(shè)置后效果圖3.3.4dimens.xml尺寸定義資源文件3.3.5themes.xml主題風(fēng)格資源文件themes.xml主要用來(lái)存放Android的主題與樣式。在新版本的Androidstudio的values目錄中,有theme.xml和theme.xml(night)兩個(gè)文件,分別標(biāo)識(shí)Android的日常主題樣式和夜間模式。若想取消默認(rèn)應(yīng)用主題中的夜間模式,只需將Theme.MaterialComponents.DayNight.DarkActionBar更改為T(mén)heme.MaterialComponents.Night.NoActionBar。在themes.xml中可創(chuàng)建新樣式,完成主題和樣式的更換。在themes.xml中可創(chuàng)建新樣式,完成主題和樣式的更換。3.3.5themes.xml主題風(fēng)格資源文件設(shè)置Android主題,如圖所示。運(yùn)行效果如圖3-14所示。3.3.5themes.xml主題風(fēng)格資源文件運(yùn)行效果如圖所示。3.3.5themes.xml主題風(fēng)格資源文件3.3.6圖像資源目錄片資源管理涉及到drawable文件夾和mipmap文件夾。如圖所示。其中,Drawable文件夾存儲(chǔ)bitmap文件、9-patch文件和xml文件。Mipmap文件夾用于存放APP的ICON圖標(biāo)文件。內(nèi)容安排3.1Activity基本概念3.2運(yùn)行狀態(tài)及生命周期3.3Android的資源管理
3.4Application基本概念3.5本章總結(jié)
3.4Application基本概念A(yù)pplication是維護(hù)應(yīng)用全局狀態(tài)的基類(lèi),應(yīng)用進(jìn)程啟動(dòng)時(shí)Android系統(tǒng)會(huì)創(chuàng)建application類(lèi)并調(diào)用類(lèi)的onCreate()函數(shù),application類(lèi)是context類(lèi)的子類(lèi)。Application和Activity、Service一樣是Android框架的一個(gè)系統(tǒng)組件。當(dāng)Android程序啟動(dòng)時(shí)系統(tǒng)會(huì)創(chuàng)建一個(gè)Application對(duì)象,用來(lái)存儲(chǔ)系統(tǒng)的一些信息。
Application的生命周期貫穿整個(gè)App運(yùn)行全過(guò)程,從App啟動(dòng)到App完全終止運(yùn)行。如圖所示為運(yùn)行過(guò)程。3.4.1
Application生命周期事件onCreate():在創(chuàng)建應(yīng)用程序時(shí)調(diào)用這個(gè)方法??梢灾貙?xiě)這個(gè)方法來(lái)實(shí)例化應(yīng)用程序單態(tài),也可以創(chuàng)建和實(shí)例化任何應(yīng)用程序狀態(tài)變量或共享資源。onConfigurationChanged():在配置改變時(shí),應(yīng)用程序?qū)ο蟛粫?huì)被終止和重啟,如果應(yīng)用程序使用的值依賴(lài)于特定的配置,則重寫(xiě)這個(gè)方法來(lái)重新加載這個(gè)值,或者在應(yīng)用程序級(jí)別處理配置改變。onTrimMemory():作為onLowMemory的一個(gè)特定于應(yīng)用程序的替代選擇,在Android4.0(APIlevel13)引入。當(dāng)運(yùn)行時(shí)決定當(dāng)前應(yīng)用程序應(yīng)該嘗試減少其內(nèi)存開(kāi)銷(xiāo)時(shí)(通常在它進(jìn)入后臺(tái)時(shí))調(diào)用。它包含一個(gè)level參數(shù),用于提供請(qǐng)求的上下文。onLowMemory():該方法一般只會(huì)在后臺(tái)進(jìn)程已經(jīng)終止,但是前臺(tái)應(yīng)用程序仍然缺少內(nèi)存時(shí)調(diào)用??梢灾貙?xiě)這個(gè)處理程序來(lái)清空緩存或者釋放不必要的資源。onTerminate():當(dāng)終止應(yīng)用程序?qū)ο髸r(shí)調(diào)用,不保證一定被調(diào)用,當(dāng)程序是被內(nèi)核終止以便為其他應(yīng)用程序釋放資源,那么將不會(huì)提醒,并且不調(diào)用應(yīng)用程序的對(duì)象的onTerminate()方法而直接終止進(jìn)程。3.4.1
Application生命周期事件當(dāng)自定義Application時(shí),重寫(xiě)onCreate()、onTerminate()、onLowMemory()、onTrimMemory()、onConfigurationChanged()方法
。其代碼如下:3.4.2重載Application
Android應(yīng)用項(xiàng)目的生命周期是指在Android系統(tǒng)中進(jìn)程從啟動(dòng)到終止的所有階段,即Android程序啟動(dòng)到停止的全過(guò)程。為了決定在內(nèi)存不足情況下銷(xiāo)毀哪個(gè)進(jìn)程,Android會(huì)根據(jù)這些進(jìn)程內(nèi)運(yùn)行的組件及這些組件的狀態(tài),把這些進(jìn)程劃分出一個(gè)“重要性層次”。這個(gè)層次順序如下:1、前臺(tái)進(jìn)程前臺(tái)進(jìn)程是指顯示在屏幕最前端并與用戶(hù)正在交互的進(jìn)程,是Android系統(tǒng)中最重要的進(jìn)程。2、可見(jiàn)進(jìn)程可見(jiàn)進(jìn)程是指部分程序界面能夠被用戶(hù)看見(jiàn),卻不在前臺(tái)與用戶(hù)交互,不響應(yīng)界面事件的進(jìn)程。3、服務(wù)進(jìn)程服務(wù)進(jìn)程是指由startService()方法啟動(dòng)服務(wù)的進(jìn)程。服務(wù)進(jìn)程有以下特征:沒(méi)有用戶(hù)界面、在后臺(tái)長(zhǎng)期運(yùn)行。4、后臺(tái)進(jìn)程后臺(tái)進(jìn)程是指不包含任何已啟動(dòng)的服務(wù),且沒(méi)有任何可見(jiàn)的Activity進(jìn)程。后臺(tái)進(jìn)程不直接影響用戶(hù)的體驗(yàn)。5、空進(jìn)程空進(jìn)程是指不包含任何活躍組件的進(jìn)程。3.4.3Android應(yīng)用項(xiàng)目生命周期內(nèi)容安排3.1Activity基本概念3.2運(yùn)行狀態(tài)及生命周期3.3Android的資源管理3.4Application基本概念
3.5本章總結(jié)
3.5本章總結(jié)本章介紹了Android的Activity組件、資源管理和Application基類(lèi)。Activity分別從運(yùn)行狀態(tài)、生命周期、屬性三方面進(jìn)行詳細(xì)闡述,以實(shí)現(xiàn)Android登錄的示例為例,有助于學(xué)習(xí)者理解和掌握Activity組件。以示例的形式介紹了strings.xml文本資源文件、colors.xml顏色設(shè)置資源文件、dimens.xml尺寸定義資源文件和themes.xml主題風(fēng)格資源文件,有助于學(xué)習(xí)者理解和掌握Android的資源管理。Application中主要介紹了生命周期事件、Application的重載以及Android應(yīng)用項(xiàng)目生命周期。通過(guò)本章的學(xué)習(xí),使學(xué)習(xí)者掌握Activity、資源管理及Application,對(duì)Android應(yīng)用程序開(kāi)發(fā)有更深入的了解。上機(jī)實(shí)現(xiàn)【例3-1】Activity登錄跳轉(zhuǎn)操作,使用Logcat分析Acitivity的生命周期。
第4章UI編程基礎(chǔ)Android應(yīng)用程序開(kāi)發(fā)技術(shù)UI(UserInterface)是用戶(hù)界面的簡(jiǎn)稱(chēng),用戶(hù)界面的主要作用提供人機(jī)交互。用戶(hù)對(duì)應(yīng)用程序的第一印象都是從用戶(hù)界面開(kāi)始的,一個(gè)好的UI應(yīng)當(dāng)注重用戶(hù)體驗(yàn),具備界面美觀、操作簡(jiǎn)單方便、符合操作習(xí)慣等特點(diǎn)。UI設(shè)計(jì)是指從軟件人機(jī)交互、操作邏輯、界面美觀等方面進(jìn)行的整體設(shè)計(jì)。一個(gè)Android應(yīng)用是由一個(gè)或多個(gè)Activity組成的,每個(gè)Activity都對(duì)應(yīng)一個(gè)布局文件Layout,每個(gè)Layout就是UI的容器,可以根據(jù)應(yīng)用程序的需要,采用類(lèi)似搭積木的方式放置各種功能不同的UI組件,通過(guò)這些組件的使用,應(yīng)用程序可以獲取用戶(hù)數(shù)據(jù)并按照用戶(hù)意愿進(jìn)行響應(yīng)。Android系統(tǒng)為開(kāi)發(fā)人員提供了大量功能豐富的UI組件,通過(guò)使用這些組件可以創(chuàng)建友好的應(yīng)用程序界面。本章介紹通過(guò)一個(gè)簡(jiǎn)單的計(jì)算器實(shí)例介紹Android應(yīng)用程序的UI的基本組成、布局、基本組件,并介紹Android系統(tǒng)的時(shí)間處理機(jī)制。項(xiàng)目導(dǎo)學(xué)內(nèi)容安排4.1AndroidUI概述4.2常用控件4.3布局管理器4.4UI布局4.5事件處理4.6對(duì)話(huà)框內(nèi)容安排4.1AndroidUI概述4.2常用控件4.3布局管理器4.4UI布局4.5事件處理4.6對(duì)話(huà)框Android系統(tǒng)呈現(xiàn)出來(lái)的用戶(hù)界面,是由多種UI元素組成的,為用戶(hù)提供信息查看和進(jìn)行交互的功能。UI主要包括:View(視圖):
是所有在UI上可視界面元素(通常被稱(chēng)為控件)的基類(lèi)。所有UI控件都是由View派生出來(lái)的,View對(duì)象都占據(jù)屏幕上的一個(gè)矩形空間。ViewGroup(視圖容器):是由View派生的一種特殊的視圖組,它是可以包含View及其派生類(lèi)的容器。4.1AndroidUI概述View和ViewGroup的關(guān)系圖4.1AndroidUI概述3.Layout(布局):描述了APP的外觀。Layout中定義了用于交互的各個(gè)控件的外觀,如大小、位置等,以及各控件之間的相互位置及對(duì)齊關(guān)系等,通常由一個(gè)XML文件描述。4.Activity(活動(dòng)):
是APP的控制器,定義了APP的行為。每一個(gè)Activity對(duì)應(yīng)了一個(gè)Layout,用戶(hù)可以通過(guò)在Layout的某個(gè)動(dòng)作,讓Activity運(yùn)行響應(yīng)的代碼來(lái)完成某個(gè)確定的動(dòng)作。每一個(gè)Active都有一個(gè)與其對(duì)應(yīng)XML布局文件。5.Fragment(片段):
可以被不同Activity重復(fù)使用的模塊化的代碼組件,可以根據(jù)Android設(shè)備屏幕的不同尺寸,優(yōu)化UI布局和創(chuàng)建可重用的UI元素。4.1AndroidUI概述UI中用于描述寬高尺寸的單位1.px(像素):是屏幕中可以顯示的最小元素單元。分辨率越高的手機(jī)屏幕的像素點(diǎn)越多。因此如果使用px為單位設(shè)置控件的大小,需要注意的是采用px設(shè)置大小在分辨率不同的手機(jī)上顯示的控件大小不同。2.dp:是與密度無(wú)關(guān)的像素,又稱(chēng)dip。使用dp的好處是在不同分辨率的屏幕總能顯示相同的大小控件,因此,一般使用dp作為控件與布局的寬高單位。3.pt:pt為point的縮寫(xiě),但中文不叫“點(diǎn)”,是一個(gè)專(zhuān)用的印刷單位“磅”,大小為1/72英寸,稱(chēng)為“絕對(duì)長(zhǎng)度”。pt和px類(lèi)似,在不同分辨率的手機(jī)上用相同pt作為字體單位,顯示的字體大小不同。4.sp:可伸縮像素,設(shè)置字體大小時(shí)使用,采用相同sp單位的字體,在不同分辨率的手機(jī)上顯示的字體大小不同。內(nèi)容安排4.1AndroidUI概述4.2常用控件4.3布局管理器4.4UI布局4.5事件處理4.6對(duì)話(huà)框4.2.1通用屬性類(lèi)別屬性設(shè)置結(jié)果IDID控件唯一標(biāo)識(shí)寬和高layout_width控件寬度layout_height控件高度顯示位置gravity控件本身內(nèi)容顯示對(duì)齊方式layout_gravity控件在父控件中顯示的位置背景顏色background控件背景顏色文本屬性text文本內(nèi)容textcolor文本顏色textsize文本大小textstyle文本樣式Android中幾乎所有的控件都是View的子類(lèi),因此他們都具有共同的屬性控件的常用屬性4.2.1通用屬性控件位置layout_gravity屬性設(shè)置該控件在父容器的相對(duì)位置屬性值含義top,bottom位于其容器的頂部,底部left,right位于其容器的左側(cè),右側(cè)center_vertical垂直方向居中fill_vertical垂直方向填充center_horizontal水平方向居中fill_horizontal水平方向填充center居中fill填滿(mǎn)其容器clip_vertical垂直方向裁剪clip_horizontal水平方向裁剪start位于其容器的開(kāi)始處end位于其容器的結(jié)束處layout_gravity可以選取的值及其含義TextView控件設(shè)置屬性android:layout_gravity=center_horizontal將TextView控件在布局中居中顯示4.2.1通用屬性文本屬性TextstyleTextView控件屬性設(shè)置為android:gravity=center_horizontal,控件所包含的文本顯示在控件正中位置名稱(chēng)含義normal正常bold加粗italic斜體gravity屬性gravity屬性用來(lái)設(shè)置控件本身的內(nèi)容文本顯示位置的對(duì)齊方式,默認(rèn)設(shè)置是左上腳對(duì)齊,可選值為top,bottom,left,right,center等,也可以通過(guò)“|”來(lái)指定多個(gè)值。如果該屬性指定為center,相當(dāng)于center_vertical|center_horizontal,即水平和垂直都居中對(duì)齊。4.2.2文本框TextViewTextView是文本框控件,用來(lái)顯示簡(jiǎn)單的文本提示信息java.lang.Object
?android.view.View
?android.widget.TextViewTextView的繼承關(guān)系4.2.2文本框TextView1.TextView支持的XML屬性及相關(guān)方法文本框控件常用XML屬性及相關(guān)方法。文本框控件通常只用來(lái)顯示文本提示信息,可以通過(guò)調(diào)用下表的方法編程設(shè)置其顯示的文本內(nèi)容和形式,一般不需要設(shè)置事件偵聽(tīng)。XML屬性相關(guān)方法說(shuō)明android:ID
文本標(biāo)簽標(biāo)識(shí)android:layout_widthsetWidth()文本標(biāo)簽的寬度android:layout_heightsetHeight()文本標(biāo)簽的高度android:textsetText()設(shè)置文本標(biāo)簽的內(nèi)容android:textSizesetTextSize()設(shè)置文本標(biāo)簽文本的字號(hào)大小android:textColor
setTextColor()設(shè)置文本標(biāo)簽的文本顏色android:textStylesetTypeface(Typeface)設(shè)計(jì)文本框你的字體風(fēng)格,如加黑、斜體等android:gravitysetGravity(int)設(shè)置文本框內(nèi)文本的對(duì)齊方式
getText()獲取文本標(biāo)簽的文本內(nèi)容4.2.2文本框TextView2.【例4-1】文本框控件應(yīng)用實(shí)例建一個(gè)工程名為samp4_1的項(xiàng)目,包名為xsyu.jsj.samp4_1的空白工程,所需的設(shè)計(jì)文件如下。序號(hào)文件名文件類(lèi)型1MainActivity.java活動(dòng)文檔2activity_main.xml布局文件3strings.xml字符串資源文檔4.2.2文本框TextView1)建立字符串資源文件打開(kāi)工程導(dǎo)航框res->values下的strings.xml,添加Line1-Li-ne4四個(gè)字符串資源4.2.2文本框TextView2)設(shè)計(jì)布局文件在布局設(shè)計(jì)時(shí)可以采用兩種方式,一種是在“Design”窗口下采用拖拉控件和在屬性欄對(duì)控件的各種屬性進(jìn)行設(shè)置的方式,另一種是直接在“Code”代碼編輯窗口對(duì)布局文件進(jìn)行文本編輯的方式。為了提高布局設(shè)計(jì)的效率,設(shè)計(jì)時(shí)建議先在“Design”窗口下拖拉控件,然后在“Code”窗口下直接進(jìn)行代碼編輯設(shè)置控件的屬性。4.2.2文本框TextView2)設(shè)計(jì)布局文件在“Design”窗口加入控件。打開(kāi)布局文件activity_main.xml中,在設(shè)計(jì)窗口下,刪除原有的控件,然后從控件箱中的“Layouts“布局類(lèi)別中拖入一個(gè)“LinearLayout(vertical)”垂直線性布局后,再?gòu)摹癟ext”文本類(lèi)中依次增加四個(gè)TextView文本框控件。此時(shí),系統(tǒng)會(huì)根據(jù)用戶(hù)的動(dòng)作自動(dòng)更新activity_main.xml文件4.2.2文本框TextView2)設(shè)計(jì)布局文件在“Code”窗口編輯activity_main.xml代碼,主要修改水平布局中四個(gè)textView的ID和text屬性,修改后的代碼片段如下<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">
<TextViewandroid:id="@+id/tV_line1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Line1"android:textSize="16dp"/>
<TextViewandroid:id="@+id/tV_line2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Line2"android:gravity="center"/>
<TextViewandroid:id="@+id/tV_line3"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#FF0000"android:text="@string/Line3"/>
<TextViewandroid:id="@+id/tV_line4"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/Line4"android:textStyle="italic"/>
</LinearLayout>4.2.2文本框TextView顯示效果4.2.2文本框TextView3)修改ManiActivity.java文件我們希望能夠動(dòng)態(tài)生成一個(gè)textView文本框,并顯示與tV_line1控件相同的內(nèi)容。步驟如下:為垂直布局指定一個(gè)ID。由于增加文本框需要放置在一個(gè)父窗口中,需要獲得父窗口對(duì)象的引用,因此在activity_main.xml需要增加如下代碼:<LinearLayoutandroid:id="@+id/LLayout_1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">更新的onCreate()函數(shù),完整代碼如下。publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//獲取線性布局的IDLinearLayoutlinear=(LinearLayout)findViewById(R.id.LLayout_1);//定義新的TextView控件tvnewTextViewtvnew=newTextView(this);//設(shè)置tvnew的ID,可有可無(wú)tvnew.setId(1);//將tvnew加入到現(xiàn)行布局中l(wèi)inear.addView(tvnew);//設(shè)置tvnew的文本和位置TextViewtv1=(TextView)findViewById(R.id.tV_line1);Stringmsg=(String)tv1.getText();tvnew.setGravity(Gravity.CENTER);tvnew.setText(msg);}}4.2.2文本框TextView最終完整的工程運(yùn)行結(jié)果如圖所示,圖中增加了一個(gè)文本框,并顯示居中顯示了第一個(gè)控件的內(nèi)容。4.2.3編輯框EditTextEditText組件是UI界面中讓用戶(hù)輸入信息的控件java.lang.Object
?android.view.View
?android.widget.TextView?android.widget.EditTextEditText的繼承關(guān)系TextView是EditText的父類(lèi),實(shí)際上EditText類(lèi)相比T-extView類(lèi)最大的不同就是具有文本編輯功能,可以接受用戶(hù)輸入。4.2.3編輯框EditText1.EditView支持的XML屬性及相關(guān)方法EditText除了具有TextView的屬性外,其常用的屬性有兩個(gè),分別是inputType和hint,如表4-6所示。hint屬性用于在輸入為空的情況下顯示輸入提示文字,提示文字會(huì)以淺灰色顯示,當(dāng)用戶(hù)在編輯框中輸入任何字符后,提示信息會(huì)消失。XML屬性相關(guān)方法說(shuō)明android:hintsetHint(int)設(shè)置當(dāng)EditText控件內(nèi)容為空時(shí),默認(rèn)顯示的提示文本android:inputTypesetRawInputTYpe(input)指定該文本框輸入類(lèi)型4.2.3編輯框EditTextEditText最常用屬性是inputType,該屬性用于設(shè)置EditText控件的輸入類(lèi)型。該屬性對(duì)應(yīng)類(lèi)型如下。例如,在用戶(hù)登錄界面設(shè)計(jì)時(shí),可以設(shè)置inputType類(lèi)型為textPassword,用戶(hù)可以輸入文本類(lèi)型的密碼,此時(shí)密碼隱藏起來(lái)只顯示“*”。屬性值含義屬性值含義none普通輸入textVisiblePassword密碼可見(jiàn)text文本number數(shù)字鍵盤(pán)textCapCharacters大寫(xiě)鍵盤(pán)numberSigned有符號(hào)數(shù)字鍵盤(pán)textCapWords單詞首字母大寫(xiě)numberDecimal帶小數(shù)點(diǎn)的數(shù)字鍵盤(pán)textCapSentences僅第一個(gè)字母大寫(xiě)numberPassword數(shù)字密碼鍵盤(pán)textMultiLine多行輸入Phone撥號(hào)鍵盤(pán)textShortMessage短消息格式Datetime日期時(shí)間鍵盤(pán)textLongMessage長(zhǎng)消息格式Date日期鍵盤(pán)textPassword文字密碼鍵盤(pán)time時(shí)間鍵盤(pán)EditText控件inputType屬性的常用取值和含義4.2.3編輯框EditText2.
【例4-2】文本框應(yīng)用實(shí)例設(shè)計(jì)一個(gè)用戶(hù)信息錄入界面,提示用戶(hù)輸入姓名、電話(huà)、郵箱和密碼。創(chuàng)建一個(gè)工程名為samp4_2的項(xiàng)目,包名為xsyu.jsj.samp4_2的空白工程,所需的設(shè)計(jì)文件如下。序號(hào)文件名文件類(lèi)型1MainActivity.java活動(dòng)文檔2activity_main.xml布局文件3strings.xml字符串資源文檔4.2.3編輯框EditText1)建立字符串資源文件<resources><stringname="app_name">project4_2</string><s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)工程考試題及答案
- 新型環(huán)保紡織品的應(yīng)用前景試題及答案
- 深度復(fù)習(xí)計(jì)劃紡織品設(shè)計(jì)師證書(shū)試題及答案
- 廣告設(shè)計(jì)的設(shè)計(jì)理念與目標(biāo) 試題及答案
- 事業(yè)編往年試題及答案解析
- 深入分析廣告設(shè)計(jì)師職業(yè)使命與價(jià)值觀試題及答案
- 助理廣告師用戶(hù)行為分析試題及答案
- 助理廣告師考試市場(chǎng)營(yíng)銷(xiāo)案例試題及答案
- 2024年助理廣告師備考內(nèi)容與學(xué)習(xí)路徑優(yōu)化試題及答案
- 廣告設(shè)計(jì)與心理營(yíng)銷(xiāo)的結(jié)合測(cè)試試題及答案
- 企業(yè)信息化建設(shè)與實(shí)施考核試卷
- 【MOOC】數(shù)值天氣預(yù)報(bào)-南京信息工程大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 海分枝桿菌感染護(hù)理
- 二零二四年度新能源汽車(chē)充電站建設(shè)總承包合同2篇
- 精神科患者隱私保護(hù)制度
- 配電箱巡檢表
- DB11-T 1894-2021 10kV及以下配電網(wǎng)設(shè)施配置技術(shù)規(guī)范
- 高血鈣癥的遺傳易感性研究
- 陜2023TJ077 住宅廚房、衛(wèi)生間裝配式L型構(gòu)件排氣道系統(tǒng)圖集
- GB/T 44102-2024跳繩課程學(xué)生運(yùn)動(dòng)能力測(cè)評(píng)規(guī)范
- 醫(yī)療器械合格供應(yīng)商管理制度
評(píng)論
0/150
提交評(píng)論