版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Android應(yīng)用開發(fā)基礎(chǔ)內(nèi)容包括1、Android 平臺概述2、搭建 Android 開發(fā)環(huán)境3、第一個(gè) Android 應(yīng)用4、Android 用戶界面設(shè)計(jì)5、Activity、Intent、Service、Broadcast Receiver6、Android 中的數(shù)據(jù)存取7、Android 的多媒體應(yīng)用8、應(yīng)用實(shí)例:a、b、c、d課程構(gòu)造開放手機(jī)聯(lián)盟OHAAndroid 平臺綜述:平臺介紹、開發(fā)者社區(qū)開發(fā)環(huán)境搭建應(yīng)用程序構(gòu)造典型應(yīng)用:用戶界面、圖形編程數(shù)據(jù)存取、網(wǎng)絡(luò)連接硬件訪問平臺綜述開發(fā)環(huán)境程序結(jié)構(gòu)數(shù)據(jù)存取網(wǎng)絡(luò)連接硬件訪問圖形編程用戶界面Android 資料獲取下載 sdk 等相關(guān)軟
2、件查看文檔、在線幫助開發(fā)者社區(qū)國內(nèi)需要代理才能訪問news、sdk下載、開發(fā)faq、源碼下載、移植1、Android 平臺概述OHA開放手機(jī)聯(lián)盟Open Handset Alliance:Google 于2007年11月5日發(fā)起組建的一個(gè)全球性的聯(lián)盟組織 聯(lián)盟支持 Google 可能發(fā)布的手機(jī)操作系統(tǒng)或者應(yīng)用軟件,共同開發(fā)名為 Android 的開放源代碼的移動系統(tǒng)聯(lián)盟成員已達(dá) 80+ 家,包括五大類:手機(jī)制造商、手機(jī)芯片商、移動運(yùn)營商軟件開發(fā)商、軟件效勞商OHA聯(lián)盟創(chuàng)始成員Aplix、Ascender、Audience、Broadcom、中國移動、eBay、Esmertec、谷歌、宏達(dá)電、英
3、特爾、KDDI、Living Image、LG、Marvell、摩托羅拉、NMS、NTT DoCoMo、Nuance、Nvidia、PacketVideo、高通、三星、SiRF、SkyPop、Sonic Network、Sprint Nextel、Synaptics、TAT、意大利電信、西班牙電信、德州儀器、T-Mobile 和 Wind RiverOHA 與 AndroidOHA 是一個(gè)軟硬件開發(fā)者組織,包括 Google, NTT DoCoMo, Sprint Nextel, HTC 目標(biāo):加速智能移動設(shè)備的開展 提供用戶更多更好更廉價(jià)的效勞由 OHA 開發(fā)的 Android,是第一個(gè)完整
4、的、開放的、免費(fèi)的智能移動開發(fā)平臺。AndroidAndroid 軟件系列包括操作系統(tǒng)、中間件和一些關(guān)鍵應(yīng)用基于 Linux 2.6 內(nèi)核,使用 Java 開發(fā)應(yīng)用程序Android SDK 提供多種開發(fā)所必要的工具與 APIGoogle Phone特點(diǎn)應(yīng)用框架可以重復(fù)使用,其組件也可以更換Dalvik 虛擬機(jī)針對移動設(shè)備進(jìn)展了優(yōu)化優(yōu)化的圖形能力支持 2D/3D 圖形集成了基于開源 WebKit 引掣的瀏覽器采用 SQLite 實(shí)現(xiàn)構(gòu)造化數(shù)據(jù)存儲多媒體支持多種主流音頻、視頻格式支持 Bluetooth,3G 和 WiFi支持照相機(jī)、GPS、指南針和加速度儀等傳感器硬件豐富的開發(fā)工具,包括模擬機(jī)
5、、調(diào)試工具、內(nèi)存運(yùn)行檢測,以及為 Eclipse 所寫的 ADT 插件優(yōu)勢:開放性源代碼完全開放,便于開發(fā)人員更清楚的把握實(shí)現(xiàn)細(xì)節(jié),便于提高開發(fā)人員的技術(shù)水平,有利于開發(fā)出更具差異性的應(yīng)用開放性給 Android 的開展積累了人氣,對于消費(fèi)者來講,最大的受益之處在于豐富的軟件資源開放的平臺也會帶來更多競爭,如此一來,消費(fèi)者將可以用更低的價(jià)位購得手機(jī)MTKAndroid優(yōu)勢:掙脫運(yùn)營商的束縛在過去很長的一段時(shí)間,特別是在歐美地區(qū),手機(jī)應(yīng)用往往受到運(yùn)營商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運(yùn)營商的控制自從 iPhone、GPhone 上市,用戶可以更加方便地連接網(wǎng)絡(luò),運(yùn)營商的制約減少隨著 2
6、G、3G 乃至 4G 移動網(wǎng)絡(luò)的逐步過渡和提升,手機(jī)隨意接入網(wǎng)絡(luò)已經(jīng)不成問題,手機(jī)定制優(yōu)勢:豐富的硬件選擇由于 Android 的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產(chǎn)品功能上的差異和特色,卻不會影響到數(shù)據(jù)同步、甚至軟件的兼容例如:從諾基亞 Symbian 手機(jī)改用蘋果 iPhone,此時(shí)還可將 Symbian 中優(yōu)秀的軟件帶到 iPhone 上使用,聯(lián)系人等資料更是可以方便地轉(zhuǎn)移優(yōu)勢:不受限制的開發(fā)商采用了對有限內(nèi)存、電池和 CPU 優(yōu)化過的 Dalvik 虛擬機(jī),Android 的運(yùn)行速度比想象的要快很多Android 的源代碼遵循 Apache V2 軟件許可,而不是 G
7、PL v2 許可證,更有利于商業(yè)開發(fā)Android 平臺提供給第三方開發(fā)商一個(gè)十分廣泛、自由的環(huán)境,催生各種新穎別致的應(yīng)用軟件強(qiáng)大的 Linux 社區(qū)的支持優(yōu)勢:良好的盈利模式3-7 分成的盈利模式,使得產(chǎn)業(yè)鏈條的各方:運(yùn)營商、制造商、獨(dú)立軟件生產(chǎn)商都可以獲得不錯(cuò)的利益將移動終端的評價(jià)標(biāo)準(zhǔn)從硬件向軟件轉(zhuǎn)變,極大的激發(fā)了軟件開發(fā)者的熱情Android Market 下載量統(tǒng)計(jì):10億:45億 :100億優(yōu)勢:無縫結(jié)合的 Google 應(yīng)用Google 成為最大的互聯(lián)網(wǎng)絡(luò)搜索引擎已經(jīng)有 10 多年歷史從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google 效勞如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要
8、紐帶Android 平臺手機(jī)將無縫結(jié)合這些 Google 效勞Android 缺乏由于采用了 Java 作為應(yīng)用開發(fā)語言,目前可用的傳統(tǒng)第三方應(yīng)用還較少Google 提供了一套 Java 核心包J2SE 5,J2SE 6的有限子集,尚不承諾遵守任何 Java 標(biāo)準(zhǔn),可能會造成 Java 陣營的進(jìn)一步分裂基于 QEMU 開發(fā)的模擬器調(diào)試手段不十分豐富,只支持通話、SMS 等,速度慢暫不具備 Push Mail 和 Office 功能,目前主要面向的是普通消費(fèi)者用戶,對商業(yè)用戶支持尚弱Android 的系統(tǒng)架構(gòu)Linux KernelLinux KernelAndroid 基于 Linux 內(nèi)核,
9、但不是 LinuxKernel 提供系統(tǒng)核心效勞,如進(jìn)程、內(nèi)存、電源管理,網(wǎng)絡(luò)連接,驅(qū)動與平安等并不包括全部的 Linux 內(nèi)核模塊Linux KernelLinux Kernel 是位于硬件和軟件堆之間的抽象層核心效勞:平安機(jī)制、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)、硬件驅(qū)動內(nèi)核扮演的是硬件層和系統(tǒng)其它層次之間的一個(gè)抽象層的概念操作系統(tǒng)的初始化和編程接口和標(biāo)準(zhǔn) Linux 系統(tǒng)有所不同LibrariesLibrariesBionic Libc:Google 自行設(shè)計(jì),未采用 glibcFunction LibrariesNative ServersHardware Abstraction Librari
10、esLibraries:Bionic LibcC/C+ 庫:通過應(yīng)用程序框架供各種 Android 組件使用,其功能包括:媒體庫:MPEG4 H.264 MP3 JPG PNG WebKit/LibWebCore:Web 瀏覽引擎SQLite 關(guān)系數(shù)據(jù)庫引擎2D/3D 圖形庫、引擎Libraries:Function LibrariesWebKit基于開源 WebKit 的瀏覽器支持 CSS、Javascript、DOM、Ajax多媒體框架基于 PacketVideo OpenCORE 平臺支持標(biāo)準(zhǔn)音頻、視頻SQLite輕型數(shù)據(jù)庫,支持多種平臺Libraries:Native ServersS
11、urface:為多種應(yīng)用提供 2D/3D 外表設(shè)計(jì)與顯示Audio:音頻處理Libraries:HALLibraries硬件抽象層 HALLayer:很小的底層,以隱藏不同機(jī)器間的差異User space C/C+ library layer硬件接口驅(qū)動作用:隔離硬件接口與 Android 平臺邏輯Andoid RuntimeAndoid Runtime應(yīng)用程序開發(fā)語言:Java 1.5+Dalvik 虛擬機(jī)字節(jié)碼 : Dalvik ExcutabledexJava 標(biāo)準(zhǔn)庫把 Java 字節(jié)碼編譯為 Dalvik dex 字節(jié)碼Andoid Runtime核心庫提供的 Java 功能、Dalv
12、ik 虛擬機(jī)依賴于 Linux 內(nèi)核可同時(shí)運(yùn)行多個(gè) Dalvik 虛擬機(jī)每個(gè) Android 應(yīng)用程序在它自己的 Dalvik VM 實(shí)例中執(zhí)行優(yōu)化的 Dalvik 可執(zhí)行文件.dexdx:把編譯過的 class 字節(jié)碼轉(zhuǎn)換為 dexDalvik Virtual MachineAndroid custom implementation virtual machineProvides application portability and runtime consistencyRuns optimized (.dex) and Dalvik bytecodeJava .class / .jar
13、files converted to .dex at build timeDesigned for embedded environmentSupports multiple virtual machine processes per deviceHighly CPU-optimized bytecode interpreterEfficiently Using runtime memoryCore LibrariesCore APIs for Java language provide a powerful, yet simple and familiar development platf
14、ormDVM vs. JVMDVMGoogle,基于存放器運(yùn)行,允許多個(gè)實(shí)例運(yùn)行Dalvik excutable bytecode為便攜設(shè)備有限的系統(tǒng)資源和供電進(jìn)展了專門優(yōu)化JVMSun,基于堆棧運(yùn)行Java bytecode跨平臺Application FrameworkApplication FrameworkActivity Manager:管理運(yùn)行應(yīng)用程序Content Provider:在各應(yīng)用之間共享數(shù)據(jù)Notification Manager:顯示提示和狀態(tài)欄Views System:可擴(kuò)展顯示,用于構(gòu)建 UIResource Manager:資源引用、管理Application
15、 Framework核心應(yīng)用:聯(lián)系人,郵件, ,瀏覽器,日歷,地圖充分訪問所有核心應(yīng)用的 API簡化組件的重用Java 語言O(shè)OP、框架式設(shè)計(jì)ApplicationsApplications直接面向終端用戶JAVA 編寫的應(yīng)用程序程序員、軟件效勞商開發(fā)環(huán)境、工具 IDE:Eclipse Eclipse plug-in:ADTAndroid Development ToolsSoftware Development Kit:Android SDKAndroid Emulator:AVDAndroid Virtual DeviceDebuger:ADBAndroid Debug BridgeDDM
16、SDalvik Debug Monitor ServiceAndroid 版本歷史自 1.5 起,Android 用甜點(diǎn)作為系統(tǒng)版本代號,按 26個(gè)字母順序:2021 年 9 月,代表機(jī)型:HTC G1Android 1.5 Cupcake:2021 年 4 月Android 1.6 Donut:2021 年 9 月Android 2.0 Eclair:2021 年 10 月Android 2.1 Eclair:2021 年 10 月Android 2.2 Froyo:2021 年 5 月Android 2.3 Gingerbread:2021 年 12 月:2021 年 2 月Android
17、 4.0 Ice Cream Sandwich:2021 年 10 月最新消息2021年5月,Google 在舊金山展示了 ,側(cè)重于解決設(shè)備分散問題,統(tǒng)一 Android 軟件平臺2021年7月, 在大陸可直接訪問,不再需要代理2021年8月,Google 以 125 億美元收購摩托羅拉移動及其擁有的約 2.45 萬份專利組合2021年10月,發(fā)布,整合手機(jī)、平板2021年3月,installer_r17、ADT-17.0.0 開放下載2021年6月,Android 5.0 ?2、搭建 Android 開發(fā)環(huán)境環(huán)境需求Windows XP32-bitor Vista32/64-bitMac O
18、S X 10.5.8 or laterx86 onlyLinuxtested on Ubuntu Dapper Drake64-bit distributions must be capable of running 32-bit apps開發(fā)包、工具軟件:JDKonly JRE not enoughEclipseAndroid SDKADT 磁盤空間需求JDK + JRE:300 MBEclipse Classic:240 MB組件類型空間估算說明SDK Tools50 MB必須Platform Tools30 MB必須Android platform(each)150 MB至少一個(gè)SDK
19、Add-on(each)100 MB可選USB Driver for Windows10 MBWindows 下必須Samples(per platform)20 MB可選Offline documents500 MB可選Quick Start準(zhǔn)備安裝 JDK version 5 or 6安裝 Eclipseversion 3.5 and higher 下載安裝 SDK starter package解壓 starter package,修改系統(tǒng)變量 PATH為 Eclipse 安裝 ADT 插件添加其它 SDK 組件運(yùn)行 Android SDK and AVD Manager, 選擇并在線安
20、裝需要的開發(fā)包done安裝 JDK下載 JDK 并以默認(rèn)設(shè)置安裝配置系統(tǒng)變量:新建 JAVA_HOME:新建 CLASSPATH:.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar;修改 PATH:將 %JAVA_HOME%bin; 添加在原變量值前 安裝 Eclipse下載 Eclipse,解壓即可可選擇的 Eclipse 版本: Eclipse IDE for Java EE Developers Eclipse IDE for Java Developers Eclipse Classic (versions 3.5.1 and higher) 常用快捷鍵:
21、ctrl+Shift+Oimport package 更新ctrl+Shift+F代碼自動排版ctrl+/設(shè)置代碼/注釋Android 的 SDK 版本API-15new!Android 2.API-10Android 2.2API-8API-7API-4Obsolete Platform.據(jù) Android Market 2021年7月初下載量統(tǒng)計(jì),占總訪問量的60%,而 和均占18%,僅為4%。Android 用戶下載統(tǒng)計(jì)2021年7月5日Android 用戶下載統(tǒng)計(jì)2021年3月5日安裝 ADT解壓后,在 Eclipse 中 Install New Software.詳細(xì)步驟請參閱:AD
22、T插件的安裝.docAndroid SDK的安裝.docJDK + Eclipse + Android SDK + ADT 的安裝、配置.doc假設(shè)僅針對本次課程,那么可參閱:說明.docAndroid 學(xué)習(xí)了解 Android、OHA動手建立開發(fā)環(huán)境閱讀 SDK 離線文檔: 動手實(shí)現(xiàn) Android 編程實(shí)例背景知識JavaObject Oriented Programming 基于框架的設(shè)計(jì)模式EclipseJ2ME、Brew、Symbian可選3、第一個(gè) Android 應(yīng)用Android 中常用的包Android.app :提供高層的程序模型、提供根本的運(yùn)行環(huán)境Android.cont
23、ent :包含各種的對設(shè)備上的數(shù)據(jù)進(jìn)展訪問和發(fā)布的類Android.database :通過內(nèi)容提供者瀏覽和操作數(shù)據(jù)庫Android.graphics :底層的圖形庫,可以將它們直接繪制到屏幕上.Android.location :定位和相關(guān)效勞的類Android.media :提供一些類管理多種音頻、視頻的媒體接口A :提供幫助網(wǎng)絡(luò)訪問的類,超過 .* 接口Android.os :提供了系統(tǒng)效勞、消息傳輸、IPC 機(jī)制Android.opengl :提供 OpenGL 的工具Avider :提供類訪問 Android 的內(nèi)容提供者Android.telephony :提供與撥打 相關(guān)的 AP
24、I 交互Android.view :提供根底的用戶界面接口框架Android.util :涉及工具性的方法,例如時(shí)間日期的操作Android.webkit :默認(rèn)瀏覽器操作接口Android.widget :各 UI 元素多數(shù)可見在應(yīng)用程序屏幕中使用Android 的文件類型java :應(yīng)用程序源代碼Android 本身相當(dāng)一局部都是用 Java 編寫而成Android 的應(yīng)用程序使用 Java 來開發(fā)class :Java 編譯后的目標(biāo)代碼Android 使用 Dalvik 來運(yùn)行應(yīng)用程序Android 的 class 文件是編譯過程中的中間目標(biāo)文件,需要鏈接成 dex 文件才能在 Dalv
25、ik 上運(yùn)行dex :Android 平臺上的可執(zhí)行文件Dalvik 虛擬機(jī)執(zhí)行的是 dex 格式字節(jié)碼,并非 Java 字節(jié)碼在編譯 Java 代碼之后,通過 Android 提供的 dx 工具可以將 Java 字節(jié)碼轉(zhuǎn)換成 dex 字節(jié)碼Dalvik 針對手機(jī)應(yīng)用、嵌入式 CPU 做過優(yōu)化,可以同時(shí)運(yùn)行多個(gè) VM 實(shí)例而不占用過多系統(tǒng)資源apk :Android 上的安裝文件apk 是 Android 安裝包的擴(kuò)展名,安裝包內(nèi)包含了與該 Android 應(yīng)用程序相關(guān)的所有文件Android 將 AndroidManifest.xml 文件、應(yīng)用程序代碼.dex文件、資源文件和其他文件打成一
26、個(gè)壓縮包,即 .apkapk 文件的本質(zhì)是一個(gè)壓縮包,一個(gè)工程只能打進(jìn)一個(gè) .apk 包Android 虛擬機(jī):DalvikDalvik 和標(biāo)準(zhǔn) Java 虛擬機(jī)JVM首要差異Dalvik 基于存放器,相對于基于數(shù)據(jù)棧的 JVM,能夠更快的編譯較大的應(yīng)用程序Dalvik 和 JVM 運(yùn)行環(huán)境的區(qū)別Dalvik 經(jīng)過優(yōu)化,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例每一個(gè) Dalvik 應(yīng)用作為一個(gè)獨(dú)立的 Linux 進(jìn)程執(zhí)行,可防止在某一虛擬機(jī)崩潰時(shí)所有應(yīng)用都被關(guān)閉Dalvik 提供一個(gè)擁有較少限制許可證的平臺Android 模擬器Android Emulator可模擬 本、通話、短消息等功能內(nèi)
27、置的瀏覽器和 Google Maps 均可聯(lián)網(wǎng)可以使用 PC 鍵盤輸入不包括小鍵盤可使用模擬器按鍵、鍵盤輸入可以使用鼠標(biāo)單擊、拖拽屏幕進(jìn)展操作Android 模擬器與真機(jī)的不同之處不支持呼叫和接聽實(shí)際來電,但可以通過控制臺模擬 呼入和呼出不支持USB連接不支持相機(jī)、視頻捕捉 不支持音頻輸入,但支持輸出不支持?jǐn)U展耳機(jī)不能確定連接狀態(tài) 不能確定電池電量水平和交流充電狀態(tài) 不能確定 SD 卡的插入/彈出不支持藍(lán)牙模擬器在 PC 機(jī)上產(chǎn)生的臨時(shí)文件需要手工清理Android 應(yīng)用Activity:活動Android 應(yīng)用程序中最根本的組件,應(yīng)用程序中一個(gè) Activity 通常就是一個(gè)單獨(dú)的屏幕每一個(gè)
28、活動都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動基類中繼承而來,活動類將會顯示由視圖控件組成的用戶接口,并對事件做出響應(yīng)大多數(shù)的應(yīng)用是由多個(gè)屏幕顯示 Activity 組成例如:Hello World!HelloworldEclipse 下自動生成 new android project HelloWorldJava 代碼package test.helloworld;import android.app.Activity;import android.os.Bundle;public class HelloworldActivity extends Activity /* Called when th
29、e activity is first created. */ Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); 返回Java 代碼/* AUTO-GENERATED FILE. DO NOT MODIFY. */package test.helloworld;public final class R public static final class attr public static fina
30、l class drawable public static final int ic_launcher=0 x7f020000; public static final class layout public static final int main=0 x7f030000; public static final class string public static final int app_name=0 x7f040001; public static final int hello=0 x7f040000; 返回xml 文件 Resources返回xml 文件 Hello Worl
31、d, HelloworldActivity! Helloworld屏幕顯示:Hello World, HelloworldActivity!xml 文件 返回RUNRun模擬器運(yùn)行Hello World, HelloworldActivity!命令行操作首先啟動模擬器然后連接模擬器:telnet localhost 5554接下來,就可以撥打 :gsm call 10086或者是發(fā)送短信:sms send 10086 messagefrom10086adb kill-server:關(guān)掉現(xiàn)有 adb Serveradb devices:顯示運(yùn)行中的設(shè)備返回屏幕分辨率入門級的:QVGA320 x2
32、40主流的:HVGA480 x320主流的:WVGA800800 x480moto特有的:WVGA854854x480,小米 M1 4寸屏魅族 M9:960 x640寸屏三星 Galaxy Tab P1000:1024x6007寸屏基準(zhǔn)分辨率:VGA640 x480HVGA-L/P:橫屏/豎屏模擬器的默認(rèn)分辨率依 SDK 版本而不同支持平板顯示:WXGA7201280 x720、WSVGA1024x600和 WXGA1280 x800project 的目錄構(gòu)造文件夾 src文件夾 gen 文件夾 Android 2.1 文件夾 assets文件夾 bin文件夾 resAndroidManife
33、st.xml Helloworld :文件夾 src該文件夾是存放工程的源代碼。新建工程時(shí),系統(tǒng)生成了一個(gè) 文件,它導(dǎo)入了兩個(gè)類 android.app.Activity 和 ,HelloWorld 類繼承自 Activity 且重寫了 onCreate 方法。Override:在方法前面加上 Override 系統(tǒng)可以幫助檢查方法的正確性。例如,public void onCreate() 這種寫法是正確的,如果寫成 public void oncreate() 這樣編譯器會報(bào)錯(cuò)The method oncreate(Bundle) of type HelloWorld must overr
34、ide or implement a supertype method,以確保你正確重寫 onCreate 方法。如果不加 Override,那么編譯器會認(rèn)為是新定義了一個(gè)方法 oncreate,檢測不出書寫錯(cuò)誤。android.app.Activity 類:因?yàn)閹缀跛械?Activity 都是與用戶交互的,所以該類關(guān)注創(chuàng)立窗口,可以用方法 setContentView(View) 將定義好的 UI 放到 Activity 顯示。有兩個(gè)方法是幾乎所有的 Activity 子類都實(shí)現(xiàn)的:onCreate(Bundle):初始化 Activity,用布局資源layout resource調(diào)用 s
35、etContentView(int) 方法定義 UI。 onPause():處理當(dāng)離開該 Activity 時(shí)要做的事情,用戶做的所有改變應(yīng)該在這里提交通常 Content Provider 保存數(shù)據(jù)。android.os.Bundle 類:從字符串值映射各種可打包的Parcelable類型Bundle:捆綁例如該類提供了公有方法:public boolean containKey (String key),如果給定的 key 包含在 Bundle 的映射中返回 true,否那么返回 false。文件夾gen該文件夾下面有一個(gè)工程創(chuàng)立時(shí)自動生成并自動更新的 文件,只讀,不允許修改。R.java
36、 文件中定義了一個(gè)類 R,類中包含很多靜態(tài)類,且靜態(tài)類的名字都與 res 中的一個(gè)資源對應(yīng),即 R 類定義了 res 目錄下所有資源的索引。通過 R.java 程序可以很快地查找到需要的資源,另外通過檢查 R.java 列表,編譯器不會將沒有被使用到的資源編譯進(jìn)應(yīng)用程序包中,以減少手機(jī)中的空間占用。ADT-17.0.0 新增自動生成類 R:資源索引類文件夾 :創(chuàng)立 project 時(shí)的 build target該文件夾下包含 Java 歸檔文件 ,包含了構(gòu)建工程所需的所有的 Android SDK 庫和 APIs。通過 android.jar 將應(yīng)用程序綁定到 Android SDK 和 An
37、droid Emulator,這使得工程可以使用所有 Android 的庫和包,并且可以在適當(dāng)?shù)沫h(huán)境中調(diào)試。HelloWorld.java 從 android.jar 通過下面兩行代碼導(dǎo)入了兩個(gè)包:import android.app.Activity;import android.os.Bundle; 文件夾 bin工程輸出的 apk、資源包 文件夾 res資源目錄,包含工程中的資源文件并將其編譯進(jìn)程序包中。向此目錄添加資源時(shí),會被 R.java 自動索引。res 中默認(rèn)有三個(gè)子目錄:drawabel、layout、valuesdrawabel:包含應(yīng)用程序可以用的圖標(biāo)、圖像文件*.png、
38、*.jpg,又分 -l-m-hdpi 三種替代分辨率layout:界面布局文件等values:工程中所需要顯示的各種文字。可以存放多個(gè)*.xml文件,還可以存放不同類型的數(shù)據(jù),如 、ADT-17.0.0 新增分支 res/drawable-xhdpi文件夾 assets該文件夾包含工程所需要使用到的諸如 mp3、視頻、數(shù)據(jù)文件,存放的也是資源與 res 文件夾存放的資源不同的是,assets 內(nèi)的資源文件不會被 R 類索引,不能使用 R 的成員引用方式進(jìn)展訪問,需借助 Java 的文件 I/O 操作文件 AndroidManifest.xml 工程的總配置文件,存儲整個(gè)工程的配置數(shù)據(jù),記錄了應(yīng)
39、用程序中所使用的各種組件,列出了應(yīng)用程序所提供的功能,指出了應(yīng)用程序使用到的效勞如 、互聯(lián)網(wǎng)、短信、GPS 等應(yīng)用程序添加新的 Activity 時(shí),也需在此注冊 包含如下設(shè)置:application、permissions、Activities、Intent filters.文件 由 Android Tools 自動生成,不允許修改文件中記錄了工程中所需要的環(huán)境信息,比方Android API 的最低兼容版本等工程 Helloworld 的 perties 文件包含如下一行代碼:target=android-7文件 proguard 是 Java 類文件的壓縮、優(yōu)化、混淆器,用于刪除沒有用的
40、類、字段、方法與屬性,以使字節(jié)碼到達(dá)最大程度地優(yōu)化作為配置文件,proguard.cfg 是 android-sdk-windowstoolslib 目錄下的同名文件的副本proguard.cfg 是在Android SDK 升級到 2.3 版后才出現(xiàn)的,沒有必要時(shí)可以不做修改ADT-17.0.0 新增文件夾 Android DependenciesADT-17.0.0 更新了默認(rèn)圖標(biāo)文件4、Android 用戶界面設(shè)計(jì)UI:User InterfaceAndroid UI :Java 的 UI 設(shè)計(jì)思想布局管理 Layout事件響應(yīng) Listener圖標(biāo) Icon菜單 Menu對話 Dial
41、og提示 Toast風(fēng)格和主題定制組件 WidgetUI:布局管理 Layout 所有 UI 類均源于 View、ViewGroup, View 的子類稱為組件Widget, ViewGroup 的子類稱為布局LayoutViewGroup 通過各種 Layout,控制所屬 View 的顯示方式,形成圖示的組合設(shè)計(jì)模式Composite:ViewGroup(Layout)ViewViewViewViewViewViewGroup(Layout)UI:布局管理 Layout Layout:組件在 Activity 中的呈現(xiàn)方式即為布局,布局中需要描述組件的大小、間距、對齊方式等Layout 的創(chuàng)
42、立:首先將需要呈現(xiàn)的組件在 xml 配置文件中進(jìn)展聲明然后在程序中通過 setContentView(View) 方法將布局呈現(xiàn)在 Activity 中最后在程序中通過 findViewById(Id) 方法獲得各組件實(shí)例UI:Layout 的種類LinearLayoutTableLayout FrameLayoutRelativeLayoutAbsoluteLayoutListLayoutRadioGroupGridView實(shí)例:TextView、Button、 ImageView 等各個(gè)組件按線性布局縱向排列線性布局LinearLayoutUI:LinearLayout線性布局 Linea
43、rLayout方向:android:orientation=vertical android:orientation=horizontal 對齊:android:gravity=top bottom/left/right大小:android:layout_width=wrap_content android:layout_width=fill_parent 實(shí)例:Test_of_Widget UI:TableLayout以行、列表格的形式布局各組件使用 TableRow 對象來定義多行單元格不能橫跨行不顯示行、列或是單元格邊界限實(shí)例:Test_of_WidgetUI:FrameLayout從屏
44、幕左上角 (0,0) 坐標(biāo)開場布局所有組件都釘?shù)狡聊坏淖笊辖遣荒転榻M件指定位置,所有組件均在 (0,0) 坐標(biāo)放置多個(gè)組件層疊排序,后面的組件覆蓋前面的組件實(shí)例:Test_of_TabHostUI:AbsoluteLayout需明確指明各組件確切的屏幕坐標(biāo)(X,Y) (0,0)為左上角,坐標(biāo)值向下或向右增加注意:通常不建議使用 AbsoluteLayout,因?yàn)榻^對布局在不同尺寸和分辨率的設(shè)備顯示中不能很好地工作Android 2.0 API 文檔中標(biāo)示該布局已過時(shí)UI:RelativeLayout指明各組件相對于其他組件通過 Id或相對于父布局對象的位置,跟 AbsoluteLayout 相
45、反在 RelativeLayout 布局里的各控件具備多種排列屬性: Layout above:控件在指定控件的上方Layout below:控件在指定控件的下方Layout to left of使用 RelativeLayout 布局的時(shí)候,程序運(yùn)行時(shí)應(yīng)盡量不去更改各組件的相對布局,以免組件間布局沖突UI:User InterfaceAndroid UI :Java 的 UI 設(shè)計(jì)思想布局管理 Layout事件響應(yīng) Listener圖標(biāo) Icon菜單 Menu對話 Dialog提示 Toast風(fēng)格和主題定制組件 WidgetUI:事件處理機(jī)制Android 中事件處理延用了 Java 的事件
46、處理機(jī)制包括三個(gè)局部:事件源:產(chǎn)生事件的組件、硬件、資源等事件:單擊事件、按鍵事件等事件監(jiān)聽器:Listener,用于監(jiān)聽事件的發(fā)生常用的事件處理方法:針對組件實(shí)例定義事件監(jiān)聽器實(shí)現(xiàn)監(jiān)聽器接口,處理不同組件的事件UI:Listener常見事件:onClick()、onKey()、onTouch()onFocusChange()、onCreate()、onPause()實(shí)例:Test_of_Widgetbutton0=(Button)findViewById(R.id.button0);button0.setOnClickListener(new View.OnClickListener() O
47、verride public void onClick(View v) / TODO Auto-generated method stub Intent intent=new Intent(MainActivity.this, Common_Widget_Test.class); startActivity(intent); );UI:User InterfaceAndroid UI :Java 的 UI 設(shè)計(jì)思想布局管理 Layout事件響應(yīng) Listener圖標(biāo) Icon菜單 Menu對話 Dialog提示 Toast風(fēng)格和主題定制組件 WidgetUI:關(guān)于 Icon應(yīng)用程序需要各種各樣
48、的圖標(biāo):icon 文件icon 要有多樣化的形狀和樣式,但又要形成統(tǒng)一的視覺風(fēng)格,其尺寸和定位也需要統(tǒng)一:紅色邊框?yàn)閳D標(biāo)尺寸藍(lán)色邊框是圖形尺寸,比圖標(biāo)尺寸稍小,圖形之外的空間用于顯示陰影和特殊效果橙色邊框是另外一種圖形尺寸。兩種類型的圖形尺寸可以到達(dá)統(tǒng)一的視覺權(quán)重UI:Icon 的風(fēng)格符合當(dāng)下的流行趨勢,防止過度使用隱喻高度簡化和夸大,小尺寸圖標(biāo)也能易于識別,不宜太復(fù)雜嘗試抓住程序的主要特征,比方音像作為音樂的 icon使用自然的輪廓和形狀,看起來幾何化和有機(jī)化,不失真實(shí)感采用前視角,幾乎沒有透視,光源在頂部。不光滑但富有質(zhì)感UI:User InterfaceAndroid UI :Java
49、的 UI 設(shè)計(jì)思想布局管理 Layout事件響應(yīng) Listener圖標(biāo) Icon菜單 Menu對話 Dialog提示 Toast風(fēng)格和主題定制組件 WidgetUI:關(guān)于 MenuAndroid 系統(tǒng)提供三種菜單:options menu選項(xiàng)菜單通過點(diǎn)擊 MENU 鍵來顯示context menu上下文菜單在某 View 上長按 2s 后顯示sub menu子菜單顯示為浮動列表,在以上兩種菜單的菜單項(xiàng)被選中時(shí)顯示出來;前二者都有可以嵌套子菜單,而子菜單本身不能再嵌套Android 系統(tǒng)具備對菜單項(xiàng)進(jìn)展分組的功能,可以把相似功能的菜單項(xiàng)分成同一個(gè)組;菜單項(xiàng)分組后,可以調(diào)用 setGroupChe
50、ckable、setGroupEnabled、setGroupVisible 等方法來統(tǒng)一設(shè)置整個(gè)菜單項(xiàng)分組的屬性,而無須一個(gè)一個(gè)單獨(dú)設(shè)置UI:options menuoptions menu 顯示在屏幕下方,最多只能顯示 6 個(gè)菜單項(xiàng),稱為 icon menu不支持 checkable 屬性;其余菜單項(xiàng)會以 more icon menu 來調(diào)出,稱為 expanded menuoptions menu 通過 Activity 的 onCreateOptionsMenu 方法來生成,這個(gè)函數(shù)只會在 menu 第一次生成時(shí)調(diào)用可在 menu 顯示前調(diào)用 onPrepareOptionsMenu
51、方法來實(shí)現(xiàn)對菜單的更改onOptionsItemSelected 方法在選中菜單項(xiàng)后被調(diào)用,實(shí)現(xiàn)菜單項(xiàng)的響應(yīng)UI:sub menu一個(gè)浮動菜單列表,通過在選項(xiàng)菜單或上下文菜單項(xiàng)選擇擇菜單項(xiàng)顯露出來不支持嵌套子菜單 / 其他的 item 定義 / 其他的 item 定義實(shí)例:Test_of_WidgetMainActivity.java 中指定主菜單 xml 文件重寫 onOptionsItemSelected() 方法public boolean onCreateOptionsMenu(Menu menu) menuInflater.inflate(R.menu.menu_, menu); r
52、eturn true;public boolean onOptionsItemSelected(MenuItem item) switch(item.getItemId() case R.id.about: aboutAlert(使用xml實(shí)現(xiàn)菜單);break; case R.id.exit: exitAlert(確認(rèn)要退出嗎?);break; return true;private void aboutAlert(String msg) private void exitAlert(String msg) resmenumenu_ 定義菜單. 運(yùn)行結(jié)果:運(yùn)行結(jié)果:UI:context me
53、nucontext menu 是跟某個(gè)具體的 View 綁定在一起的在 Activity 中用 registerForContextMenu 方法來為某個(gè) View 注冊 context menucontext menu 在顯示前都會調(diào)用 onCreateContextMenu 方法來生成 menuOverridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) menu.add(0, ITME1, 0, 紅色背景); menu.add(0, ITME2, 0, 綠色背景); m
54、enu.add(0, ITME3, 0, 藍(lán)色背景);registerForContextMenu(textView00);onContextItemSelected 方法處理菜單項(xiàng)選中事件Overridepublic boolean onContextItemSelected(MenuItem item) / TODO Auto-generated method stub switch(item.getItemId() case ITEM1: textView00.setBackgroundColor(Color.RED);break; case ITEM2: textView00.setB
55、ackgroundColor(Color.GREEN);break; case ITEM3: textView00.setBackgroundColor(Color.BLUE);break; return true; private static final int ITEM1 = Menu.FIRST;private static final int ITEM2 = Menu.FIRST+1;private static final int ITEM3 = Menu.FIRST+2;運(yùn)行結(jié)果:UI:User InterfaceAndroid UI :Java 的 UI 設(shè)計(jì)思想布局管理 La
56、yout事件響應(yīng) Listener圖標(biāo) Icon菜單 Menu對話 Dialog提示 Toast風(fēng)格和主題定制組件 WidgetUI:關(guān)于 DialogAndroid 中對話框主要有:普通對話框、選項(xiàng)對話框、單項(xiàng)選擇多項(xiàng)選擇對話框、進(jìn)度對話框、日期對話框、時(shí)間對話框等在程序中可以通過方法 onCreateDialog 來完成對話框的創(chuàng)立,調(diào)用 showDialog 方法傳入對話框的id來顯示指定對話框關(guān)閉對話框可用 dismiss 方法實(shí)現(xiàn),也可以調(diào)用 removeDialog 方法來徹底釋放對話框onDismissListener 方法可在關(guān)閉對話框時(shí)執(zhí)行一些特定工作實(shí)例:Test_of_W
57、idgetbutton1.setOnClickListener(new View.OnClickListener() public void onClick(View v) showDialog(0); );protected Dialog onCreateDialog(int id) ProgressDialog pD = new ProgressDialog(this); pD.setIcon(R.drawable.icon); pD.setTitle(ProgressDialog測試); pD.setIndeterminate(true); pD.setMessage(我只是測試代碼,看
58、看.); pD.setCancelable(true); pD.setButton(Dialog.BUTTON_POSITIVE, 確定, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) dialog.cancel(); ); return pD; UI:DialogUI:DialogUI:User InterfaceAndroid UI :Java 的 UI 設(shè)計(jì)思想布局管理 Layout事件響應(yīng) Listener圖標(biāo) Icon菜單 Menu對話 Dial
59、og提示 Toast風(fēng)格和主題定制組件 WidgetUI:關(guān)于 ToastToast當(dāng)用戶執(zhí)行某一動作或某一事件發(fā)生時(shí),系統(tǒng)自動顯示提示信息,顯示一段時(shí)間后自動消失,是為Toast使用 Toast調(diào)用 Toast 的 makeText() 設(shè)置文本和時(shí)長調(diào)用 Toast 的 show() 方法顯示實(shí)例:Test_of_Stringfinal int l = Toast.LENGTH_LONG;final int s = Toast.LENGTH_SHORT;final String s1 = 我會多顯示一會兒,呵呵;final String s2 = 我少顯示一會兒,呵呵;button1.se
60、tOnClickListener(new OnClickListener() public void onClick(View v) Toast t1 = Toast.makeText(getApplicationContext(),s1,l); t1.show(); );button2.setOnClickListener(new OnClickListener() public void onClick(View v) Toast t2 = Toast.makeText(getApplicationContext(),s2,s); t2.show(); );實(shí)例:Test_of_Toast
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人信用貸款協(xié)議(2024年版)
- 2025年度健康食品研發(fā)與購銷合作框架協(xié)議3篇
- 2025年寵物醫(yī)院聯(lián)合科研項(xiàng)目合作協(xié)議3篇
- 2025版事業(yè)單位新員工試用期勞動合同范本3篇
- 小學(xué)課外閱讀與語文學(xué)科素養(yǎng)的培育
- 科技型企業(yè)組織架構(gòu)的靈活性與穩(wěn)定性
- 二零二五年餐飲業(yè)食品安全宣傳教育合作協(xié)議書模板3篇
- 2025版仙崇線道路養(yǎng)護(hù)與管理服務(wù)合同3篇
- 中介服務(wù)居間合同范本(2024年版)版B版
- 二零二五版集裝箱堆場管理及服務(wù)合同3篇
- 《色彩基礎(chǔ)》課程標(biāo)準(zhǔn)
- 人力資源 -人效評估指導(dǎo)手冊
- 大疆80分鐘在線測評題
- 2023年成都市青白江區(qū)村(社區(qū))“兩委”后備人才考試真題
- 2024中考復(fù)習(xí)必背初中英語單詞詞匯表(蘇教譯林版)
- 《現(xiàn)代根管治療術(shù)》課件
- 肩袖損傷的護(hù)理查房課件
- 2023屆北京市順義區(qū)高三二模數(shù)學(xué)試卷
- 公司差旅費(fèi)報(bào)銷單
- 2021年上海市楊浦區(qū)初三一模語文試卷及參考答案(精校word打印版)
- 八年級上冊英語完形填空、閱讀理解100題含參考答案
評論
0/150
提交評論