Android智能手機開發(fā)課程講義完整版



AndroidAndroid智能手機開發(fā)課智能手機開發(fā)課程講義程講義(完整版完整版)索引索引nAndroid教程01-平臺概述-6nAndroid教程02-開發(fā)環(huán)境-37nAndroid教程03-應用程序模型-55nAndroid教程04-用戶界面-72nAndroid教程05-應用編程-117nAndroid教程06-網(wǎng)絡連接-137nAndroid教程07-硬件訪問-142浙江大學計算機學院課程結構課程結構n目標:了解智能手機開發(fā)現(xiàn)狀,Android平臺體系結構和應用程序模型,覆蓋了幾個主要技術應用平臺綜述平臺綜述開發(fā)環(huán)境開發(fā)環(huán)境程序結構程序結構數(shù)據(jù)存取數(shù)據(jù)存取網(wǎng)絡連接網(wǎng)絡連接硬件訪問硬件訪問圖形編程圖形編程用戶界面用戶界面HelloWorldHelloAndroidFileAndroidHttpAndroidCameraAndroidHelloAndroid浙江大學計算機學院課程結構課程結構nAndroid平臺綜述:q平臺介紹、開發(fā)者社區(qū)n開發(fā)環(huán)境:q構建Android開發(fā)環(huán)境n應該程序:q應用程序結構n典型應用:q用戶界面q圖形編程q數(shù)據(jù)存取q網(wǎng)絡連接q硬件訪問浙江大學計算機學院獲取獲取Android資料的途徑資料的途徑nhttp:/q有時需要翻墻nhttp:/q下載SDK等相關軟件q查看文檔q在線幫助q開發(fā)社區(qū)浙江大學計算機學院1、平臺概述、平臺概述智能手機開發(fā)智能手機開發(fā)2010.06.開放手機聯(lián)盟開放手機聯(lián)盟n開放手機聯(lián)盟,Open Handset Alliance:是美國Google 公司與2007 年11 月5 日宣布組建的一個全球性的聯(lián)盟組織。
n聯(lián)盟將會支持Google 發(fā)布的Android 手機操作系統(tǒng)或者應用軟件,共同開發(fā)名為Android 的開放源代碼的移動系統(tǒng)n開放手機聯(lián)盟包括手機制造商、手機芯片廠商和移動運營商幾類目前,聯(lián)盟成員數(shù)量已經達到了43 家浙江大學計算機學院移動手機聯(lián)盟創(chuàng)始成員移動手機聯(lián)盟創(chuàng)始成員nAplix、Ascender、Audience、Broadcom、中國移動、eBay、Esmertec、谷歌、宏達電、英特爾、KDDI、Living Image、LG、Marvell、摩托羅拉、NMS、NTT DoCoMo、Nuance、Nvidia、PacketVideo、高通、三星、SiRF、SkyPop、Sonic Network、Sprint Nextel、Synaptics、TAT、意大利電信、西班牙電信、德州儀器、T-Mobile和Wind River浙江大學計算機學院浙江大學計算機學院Google Phone浙江大學計算機學院OHA與與AndroidnOHA是一個軟硬件開發(fā)者組織,包括 Google,NTT DoCoMo,Sprint Nextel,and HTC n目標:q加速智能移動設備的發(fā)展 q提供用戶更多更好更便宜的服務n由OHA開發(fā)的Android,是第一個完整的、開放的、免費的智能移動開發(fā)平臺。
浙江大學計算機學院AndroidnAndroid 軟件系列包括操作系統(tǒng)、中間件和一些關鍵應用nAndroid是基于JAVA的系統(tǒng),運行在 Linux 2.6核上nAndroid SDK 提供多種開發(fā)所必要的工具與API浙江大學計算機學院特點特點1n應用框架可以重復使用,其組件也可以更換nDalvik虛擬機針對移動設備進行了優(yōu)化n優(yōu)化的圖形能力支持2D、3D圖形(OpenGL ES 1.0)n集成了基于開源WebKit引掣的瀏覽器nSQLite作為結構化數(shù)據(jù)存儲浙江大學計算機學院特點特點2n多媒體支持多種音頻、視頻格式nGSM Telephony(hardware dependent)n支持藍牙Bluetooth,3G和WiFin支持照相機、GPS、指南針和加速度儀等傳感器硬件n豐富的開發(fā)環(huán)境包括模擬機、調試工具、內存運行檢測,以及為Eclipse IDE所寫的插件浙江大學計算機學院Android的優(yōu)勢的優(yōu)勢n 源代碼完全開放,便于開發(fā)人員更清楚的把握實現(xiàn)細節(jié),便于提高開發(fā)人員的技術水平,有利于開發(fā)出更具差異性的應用n采用了對有限內存、電池和CPU 優(yōu)化過的虛擬機Dalvik,Android 的運行速度比想象的要快很多。
n運營商(中國移動等)的大力支持,產業(yè)鏈條的熱捧n良好的盈利模式(3/7 開),產業(yè)鏈條的各方:運營商、制造商、獨立軟件生產商都可以獲得不錯的利益將移動終端的評價標準從硬件向軟件轉變,極大的激發(fā)了軟件開發(fā)者的熱情nAndroid 的源代碼遵循Apache V2 軟件許可,而不是通常的GPL v2 許可有利于商業(yè)開發(fā)n具有強大的Linux 社區(qū)的支持浙江大學計算機學院Android的不足的不足n由于采用了Java 作為應用開發(fā)語言,目前可用的傳統(tǒng)第三方應用還很少,但由于Android 是一款完全開源的移動計算平臺,相信第三方應用會很快的豐富起來nGoogle 提供了一套Java 核心包(J2SE 5,J2SE 6)的有限子集,尚不承諾遵守Java 任何Java 規(guī)范,可能會造成ava 陣營的進一步分裂n現(xiàn)有應用完善度不太夠,需要的開發(fā)工作量較大n基于QEMU 開發(fā)的模擬器調試手段不十分豐富,只支持通話、等,速度慢n暫不具備Push Mail 和Office(DataViz、QuickOffice 計劃近期推出)功能,目前主要面向的是普通消費者用戶,對商業(yè)用戶支持尚弱浙江大學計算機學院系統(tǒng)環(huán)境系統(tǒng)環(huán)境nAndroid SDK所支持的操作系統(tǒng):qWindows XP(32-bit)or Vista(32-or 64-bit)qMac OS X 10.4.8 or later(x86 only)qLinux(tested on Linux Ubuntu Dapper Drake)浙江大學計算機學院Android的系統(tǒng)架構的系統(tǒng)架構浙江大學計算機學院Linux KernelnAndroid 基于Linux內核,但不是Linuxn內核提供系統(tǒng)核心服務,如進程、內存、電源管理,網(wǎng)絡連接,驅動與安全等。
n并不包括全部的Linux浙江大學計算機學院Android內核內核nLinux 內核位于硬件和軟件堆之間的抽象層q核心服務:安全機制、內存管理、進程管理、網(wǎng)絡、硬件驅動q內核扮演的是硬件層和系統(tǒng)其它層次之間的一個抽象層的概念q操作系統(tǒng)的初始化和編程接口和標準的Linux 系統(tǒng)是有所不同的浙江大學計算機學院LibrariesnBionic LibcnFunction LibrariesnNative ServersnHardware Abstraction Libraries浙江大學計算機學院LibrariesnC/C+庫:被各種Android 組件使用通過應用程序框架開發(fā)者可以使用其功能包括:n媒體庫:MPEG4 H.264 MP3 JPG PNG.nWebKit/LibWebCore:Web 瀏覽引擎nSQLite 關系數(shù)據(jù)庫引擎n2D,3D 圖形庫、引擎浙江大學計算機學院Function LibrariesnWebKitq基于開源WebKit的瀏覽器q支持CSS、Javascript、DOM、Ajaxn多媒體框架q基于PacketVideo OpenCORE平臺q支持標準音頻、視頻nSQLiteq輕型數(shù)據(jù)庫,支持多種平臺浙江大學計算機學院Native Servers-Surfacen為多種應用提供2D、3D表面設計浙江大學計算機學院Native Servers-Audion音頻處理浙江大學計算機學院Hardware Abstraction Libsn硬件虛擬層nUser space C/C+library layern硬件接口驅動n使Android平臺邏輯與硬件接口分離浙江大學計算機學院Andoid Runtimen應用開發(fā)語言:JavanDalvik虛擬機q指令:Dalvik Excutable nJava標準庫q把java代碼編譯為Dalvik可執(zhí)行文件(dex format)浙江大學計算機學院運行環(huán)境運行環(huán)境n核心庫提供的Java 功能Dalvik 虛擬機依賴于Linux 內核,n可同時運行多個Dalvik 虛擬機,n每一個Android 應用程序在它自己的Dalvik VM 實例中運行VM 執(zhí)行優(yōu)化的Dalvik 可執(zhí)行文件(.dex)qDx-工具把編譯過的Java 文件轉換為dex 文件浙江大學計算機學院Dalvik Virtual MachinenAndroid custom implementation virtual machineqProvides application portability and runtime consistencyqRuns optimized file format(.dex)and Dalvik bytecodeqJava.class/.jar files converted to.dex at build timenDesigned for embedded environmentqSupports multiple virtual machine processes per deviceqHighly CPU-optimized bytecode interpreterqEfficiently Using runtime memorynCore LibrariesqCore APIs for Java language provide a powerful,yet simple and familiar development platform浙江大學計算機學院DVM vs JVMnDVMqGoogleqDalvik excutablenJVMqSunqJava bytecode浙江大學計算機學院浙江大學計算機學院Applications FrameworknActivity managerq管理運行應用程序nContent Providerq在各應用之間共享數(shù)據(jù)nResource Managerq管理非代碼資源nNotification Managerq顯示用戶提示和狀態(tài)欄nViews Systemq可擴展顯示,可構建UI浙江大學計算機學院應用和框架應用和框架n核心應用,例如聯(lián)系人,電子郵件,電話,瀏覽器,日歷,地圖,.n充分訪問所有核心應用框架APIn簡化組件的重用n用Java 編寫應用程序浙江大學計算機學院ApplicationsnJAVA編寫的應用程序浙江大學計算機學院開發(fā)環(huán)境開發(fā)環(huán)境 nIDE Eclipse nEclipse plug-in-ADTnSoftware Development Kit(SDK)nAndroid EmulatornDebuger浙江大學計算機學院Constants浙江大學計算機學院2、開發(fā)環(huán)境、開發(fā)環(huán)境智能手機開發(fā)建立建立Android開發(fā)環(huán)境開發(fā)環(huán)境nJDK 5 or JDK 6(JRE alone is not sufficient)q設置環(huán)境變量:JAVA_HOME、CLASSPATHnEclipse 3.3(Europa),3.4(Ganymede)nAndroid SDK nADT 0.8.0nEclipse安裝ADT 插件浙江大學計算機學院Quick Startn1.準備q安裝JDK(version 5 or 6 required)qEclipse(version 3.4 or 3.5,needed only if you want develop using the ADT Plugin).n2.下載安裝SDK starter packageqTo install the SDK,simply unpack the starter package to a safe location and then add the location to your PATH.n3.為Eclipse安裝ADT插件n4.添加其它SDK組件qUse the Android SDK and AVD Manager,included in the SDK starter package,to add one or more Android platforms and other components to your SDK.nSDK Setup Done!浙江大學計算機學院Android可視化環(huán)境配置可視化環(huán)境配置nJDK1.6q下載網(wǎng)址:http:/ SDK 2.xq下載網(wǎng)址:http:/浙江大學計算機學院安裝安裝Java JDKnJDK 5 or JDK 6(JRE alone is not sufficient)nAndroid Development Tools plugin(optional)nNot compatible with Gnu Compiler for Java(gcj)浙江大學計算機學院安裝安裝EclipsenEclipse 3.4(Ganymede)or 3.5(Galileo)nEclipse JDT plugin(included in most Eclipse IDE packages)qIf you need to install or update Eclipse,you can download it from http:/www.eclipse.org/downloads/.nSeveral types of Eclipse packages are available for each platform.For developing Android applications,we recommend that you install one of these packages:qEclipse IDE for Java EE Developers qEclipse IDE for Java Developers qEclipse for RCP/Plug-in Developers qEclipse Classic(versions 3.5.1 and higher)浙江大學計算機學院Android的的SDK版本版本nAndroid 2.1 Platform(new!)nAndroid 1.6 PlatformnAndroid 1.5 PlatformnOlder PlatformsqAndroid 2.0.1 PlatformqAndroid 2.0 PlatformqAndroid 1.1 Platform浙江大學計算機學院操作系統(tǒng)操作系統(tǒng)nWindows XP(32-bit)or Vista(32-or 64-bit)nMac OS X 10.5.8 or later(x86 only)nLinux(tested on Linux Ubuntu Hardy Heron)q64-bit distributions must be capable of running 32-bit applications.For information about how to add support for 32-bit applications.浙江大學計算機學院硬件環(huán)境硬件環(huán)境n不包括JAVA、Eclipse。
浙江大學計算機學院安裝安裝Androidn解壓,在Eclipse中Install New Software浙江大學計算機學院Android學習方法學習方法n了解什么是Androin建立開發(fā)環(huán)境n閱讀SDK 文檔n背景知識qJavaq面向對象q設計模式qEclipse使用qJ2ME、Brew、Symbian(選)浙江大學計算機學院Adroid應用應用浙江大學計算機學院Activity活動活動1n最基本的Android 應用程序組件,應用程序中,一個活動通常就是一個單獨的屏幕每一個活動都被實現(xiàn)為一個獨立的類,并且從活動基類中繼承而來,活動類將會顯示由視圖控件組成的用戶接口,并對事件做出響應n大多數(shù)的應用是由多個屏幕顯示組成q例如:一個文本信息的應用也許有一個顯示發(fā)送消息的聯(lián)系人列表屏幕,第二個屏幕用來寫文本消息和選擇收件人,再來一個屏幕查看消息歷史或者消息設置操作等這里每一個這樣的屏幕就是一個活動,很容易實現(xiàn)從一個屏幕到一個新的屏幕并且完成新的活動n在某些情況下當前的屏幕也許需要向上一個屏幕活動提供返回值-比如讓用戶從手機中挑選一張照片返回通訊錄做為電話撥入者的頭像浙江大學計算機學院Activity活動活動2n當一個新的屏幕打開后,前一個屏幕將會暫停,并保存在歷史堆棧中。
用戶可以返回到歷史堆棧中的前一個屏幕當屏幕不再使用時,還可以從歷史堆棧中刪除默認情況下,Android 將會保留從主屏幕到每一個應用的運行屏幕n簡單理解Activity 代表一個用戶所能看到的屏幕,Activity 主要是處理一個應用的整體性工作,例如,監(jiān)聽系統(tǒng)事件(按鍵事件、觸摸屏事件等)、為用戶顯示指定的View,啟動其他Activity 等所有應用的Activity都繼承于android.app.Activity 類,該類是Android 提供的基層類,其他的Activity 繼承該父類后,通過Override父類的方法來實現(xiàn)各種功能,這種設計在其他領域也較為常見浙江大學計算機學院Activity生命周期生命周期浙江大學計算機學院Android模擬器模擬器nAndroid Emulator:q可模擬電話本、通話等功能q內置的瀏覽器和Google Maps都可以聯(lián)網(wǎng)q可以使用鍵盤輸入,q可單擊模擬器按鍵輸入,q可以使用鼠標單擊、拖動屏幕進行操作浙江大學計算機學院Android模擬器模擬器n模擬器和真機的不同之處 q不支持呼叫和接聽實際來電,但可以通過控制臺模擬電話呼叫(呼入和呼出)。
q不支持USB連接q不支持相機/視頻捕捉q不支持音頻輸入(捕捉),但支持輸出(重放)q不支持擴展耳機q不能確定連接狀態(tài)q不能確定電池電量水平和交流充電狀態(tài)q不能確定SD卡的插入/彈出q不支持藍牙浙江大學計算機學院模擬器使用注意事項模擬器使用注意事項n遇到系統(tǒng)關于C盤空間不足之類的提示,是由于Android模擬器每次運行時會臨時生成幾個.tmp后綴的臨時文件,一段時間后,其可能占用幾G的磁盤空間需要手工定期清理浙江大學計算機學院3、應用程序、應用程序智能手機開發(fā)智能手機開發(fā)Android虛擬機虛擬機DalviknDalvik和標準Java虛擬機(JVM)首要差別qDalvik 基于寄存器,而JVM 基于棧n基于寄存器的虛擬機對于更大的程序來說,在它們編譯的時候,花費的時間更短nDalvik和Java運行環(huán)境的區(qū)別qDalvik 經過優(yōu)化,允許在有限的內存中同時運行多個虛擬機的實例,q每一個Dalvik 應用作為一個獨立的Linux 進程執(zhí)行n獨立進程可防止在虛擬機崩潰的時候所有程序都被關閉qDalvik 提供一個擁有較少限制許可證的平臺浙江大學計算機學院重要包的描述重要包的描述nAndroid.app:提供高層的程序模型、提供基本的運行環(huán)境nAndroid.content:包含各種的對設備上的數(shù)據(jù)進行訪問和發(fā)布的類nAndroid.database:通過內容提供者瀏覽和操作數(shù)據(jù)庫nAndroid.graphics:底層的圖形庫,可以將它們直接繪制到屏幕上.nAndroid.location:定位和相關服務的類nAndroid.media:提供一些類管理多種音頻、視頻的媒體接口nA:提供幫助網(wǎng)絡訪問的類,超過通常的.*接口nAndroid.os:提供了系統(tǒng)服務、消息傳輸、IPC 機制nAndroid.opengl:提供OpenGL 的工具nAndroid.provider:提供類訪問Android 的內容提供者nAndroid.telephony:提供與撥打電話相關的API 交互nAndroid.view:提供基礎的用戶界面接口框架nAndroid.util:涉及工具性的方法,例如時間日期的操作nAndroid.webkit:默認瀏覽器操作接口nAndroid.widget:各種UI 元素(大部分可見)在應用程序的屏幕中使用浙江大學計算機學院Android的相關文件類型的相關文件類型nJava文件-應用程序源文件qandroid 本身相當一部分都是用java 編寫而成qandroid 的應用使用java 來開發(fā)。
nClass文件-Java編譯后的目標文件qGoogle使用Dalvik 來運行應用程序qAndroid的class 文件是編譯過程中的中間目標文件,需要鏈接成dex 文件才能在Dalvik 上運行浙江大學計算機學院Dex文件文件nDex文件-Android平臺上的可執(zhí)行文件qAndroid 虛擬機Dalvik 支持的字節(jié)碼文件格式q這種虛擬機執(zhí)行的并非Java 字節(jié)碼,而是另一種字節(jié)碼:dex 格式的字節(jié)碼q在編譯Java 代碼之后,通過Android 平臺上的工具可以將Java 字節(jié)碼轉換成Dex 字節(jié)碼qDalvik VM 針對手機程式/CPU 做過最佳化,可以同時執(zhí)行許多VM 而不會占用太多Resource浙江大學計算機學院Apk文件文件nApk文件-Android上的安裝文件qApk 是Android 安裝包的擴展名,一個Android 安裝包包含了與該Android 應用程序相關的所有文件napk文件將AndroidManifest.xml文件、應用程序代碼(.dex 文件)、資源文件和其他文件打成一個壓縮包q一個工程只能打進一個.apk文件qapk 文件的本質是一個zip包。
浙江大學計算機學院Hello world!第一個運行程序第一個運行程序HelloAndroidnEclipse自動生成qnew android projectnHelloAndroid浙江大學計算機學院HelloAndroid.javanJava程序package com.android.helloAndroid;import android.app.Activity;import android.os.Bundle;public class HelloAndroid extends Activity /*Called when the activity is first created.*/Override public void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);浙江大學計算機學院R.javanJava程序/*AUTO-GENERATED FILE.DO NOT MODIFY.*/package com.android.helloAndroid;public final class R public static final class attr public static final class drawable public static final int icon=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;浙江大學計算機學院main.xmlnXml文件Resources浙江大學計算機學院strings.xmlnXml文件 Hello Android,2010.HelloAndroid將要顯示內容:Hello Android,2010.浙江大學計算機學院RUNRUN浙江大學計算機學院模擬運行模擬運行顯示內容:Hello Android,2010.浙江大學計算機學院命令行運行命令行運行n啟動模擬器qemulator-avd android1.6-skin HVGA-pn連接模擬器:qtelnet localhost 5554n撥打電話:qgsm call 13810000086n發(fā)送短信:qsms send 13810000086 HelloAndroid浙江大學計算機學院模擬器屏幕模擬器屏幕nHVGA-L:480 x320橫屏nHVGA-P:320 x480豎屏(默認)nQVGA-L:320 x240橫屏nQVGA-P:240 x320豎屏nWVGA-L:800 x480橫屏浙江大學計算機學院顯示圖像顯示圖像n增加ImageView浙江大學計算機學院4、用戶界面、用戶界面智能手機開發(fā)智能手機開發(fā)User Interface用戶界面用戶界面n說明布局Layoutn創(chuàng)建菜單Menusn創(chuàng)建對話Dialogsn處理用戶UI事件n用戶提示n確定風格n定制組件n數(shù)據(jù)與界面綁定浙江大學計算機學院模擬器屏幕模擬器屏幕nHVGA-L:480 x320橫屏nHVGA-P:320 x480豎屏(默認)nQVGA-L:320 x240橫屏nQVGA-P:240 x320豎屏nWVGA-L:800 x480橫屏浙江大學計算機學院UI用戶界面設計:用戶界面設計:Icon設計設計n應用程序需要各種各樣的圖標尺寸和定位尺寸和定位nLauncher icons要有多樣化的形狀和樣式,但又要形成統(tǒng)一的視覺風格,其尺寸和定位也用統(tǒng)一:q紅色邊框為圖標尺寸q藍色邊框是圖形尺寸,比圖標尺寸稍小,圖形之外的空間用于顯示陰影和特殊效果。
q橙色邊框是另外一種圖形尺寸兩種類型的圖形尺寸可以達到統(tǒng)一的視覺權重浙江大學計算機學院Icon的風格的風格n符合當下的流行趨勢,避免過度使用隱喻n高度簡化和夸張,小尺寸圖標也能易于識別,不宜太復雜n嘗試抓住程序的主要特征,比如音像作為音樂的iconn使用自然的輪廓和形狀,看起來幾何化和有機化,不失真實感n采用前視角,幾乎沒有透視,光源在頂部n不光滑但富有質感浙江大學計算機學院UI用戶界面設計:用戶界面設計:Widget設計設計nWidget是Android 1.5的一個新特性,允許程序顯示一些常用而又重要的信息在用戶的桌面主屏上q標準的Android系統(tǒng)映像包含了一些示例widgets包括指針時鐘、音樂播放器和其他工具如Google搜索欄qWidget即是可由用戶自己編寫的功能控件n典型的Android Widget有三個主要組件:q邊框q框架q圖形控件以及其他元素n注意widgets的開狀尺寸以便在主屏上顯示浙江大學計算機學院User Interface GuidelinesnActivity and Task DesignqActivities are the basic,independent building blocks of applications.As you design your applications UI and feature set,you are free to re-use activities from other applications as if they were yours,to enrich and extend your application.qThese guidelines describe how activities work,illustrates them with examples,and describes important underlying principles and mechanisms,such as multitasking,activity reuse,intents,the activity stack,and tasks.It covers this all from a high-level design perspective.浙江大學計算機學院UI用戶界面設計:用戶界面設計:Menu設計設計n選項菜單Options Menu:活動的主菜單。
通過按下設備菜單鍵來顯示它選項菜單包含兩組菜單項:q圖標菜單Icon Menun這個是當用戶按下菜單鍵時最初出現(xiàn)屏幕下方的item集合它支持最多6個菜單項只有這些菜單支持圖標而且這些菜單并不支持checkboxes或者radio buttonsq擴展菜單Expanded Menun這是通過按“更多”菜單顯現(xiàn)出來的一個豎向的項目列表它僅當圖標菜單過多時存在而且是由6個以及其它選項菜單組成n上下文菜單Context Menu:浮動菜單列表,通常在你長時間按在一個視圖上時出現(xiàn)(比如一個列表項)n子菜單Submenu:浮動菜單列表,通過在選項菜單或上下文菜單選擇菜單項顯露出來不支持嵌套子菜單浙江大學計算機學院Android UI布局布局nViewGroup通過各種Layout,控制所屬View的顯示位置ViewGroup(Layout)ViewViewViewViewViewViewGroup(Layout)浙江大學計算機學院LayoutnAbsoluteLayoutnFrameLayoutnGridViewnLinearLayoutnListLayoutnRadioGroupnTableLayoutn浙江大學計算機學院顯示圖像顯示圖像n增加ImageViewn與原先的TextView,按垂直線性布局。
線性布局LinearLayout浙江大學計算機學院布局布局n線性布局LinearLayoutq垂直:android:orientation=vertical“q水平:android:orientation=horizontal浙江大學計算機學院FrameLayoutn在屏幕上故意保留的空白空間,可以填充一個單獨的對象n所有子元素都釘?shù)狡聊坏淖笊辖莕不能為子元素指定位置浙江大學計算機學院TableLayoutn子元素放入到行與列中n不顯示行、列或是單元格邊界線n單元格不能橫跨行,如HTML 中一樣浙江大學計算機學院AbsoluteLayoutn指明子元素確切的屏幕(X,Y)坐標n(0,0)是左上角,下移或右移時,坐標值增加n允許元素重疊(但是不推薦)n注意:q一般建議不使用AbsoluteLayout 除非你有很好的理由來使用它q因為它相當嚴格并且在不同的設備顯示中不能很好地工作浙江大學計算機學院RelativeLayoutn讓子元素指定它們相對于其他元素的位置(通過ID 來指定)或相對于父布局對象,跟AbsoluteLayout這個絕對坐標布局是個相反n在RelativeLayout布局里的控件包含豐富的排列屬性:qLayout above:控件在指定控件的上方qLayout below:控件在指定控件的下方qLayout to left of。
n使用 RelativeLayout布局的時候,盡少程序運行時做控件布局的更改,因為 RelativeLayout布局里面的屬性之間,很容易沖突浙江大學計算機學院Color顏色顏色nandroid.graphics.Color 包含顏色值qColor.BLACKqColor.BLUEqColor.CYANqColor.DKGRAYqColor.GRAYqColor.GREENqColor.LTGRAYqColor.MAGENTAqColor.REDqColor.TRANSPARENTqColor.WHITEqColor.YELLOW浙江大學計算機學院字體風格字體風格Typefacenandroid.graphics.Typeface實踐qTypeface.create(Typeface family,int style)n創(chuàng)建一個混合型新的字體:有4*5 中搭配qTypeface.setTypeface(Typeface tf,int style)n設置一個混合型字體:有4*5 中搭配qTypeface.setTypeface(Typeface tf)n設置一個只有Typeface 風格的字體:有五種形式n字體(4種)qBOLD、BOLD_ITALIC、ITALIC、NORMALq粗體、粗斜體、斜體、普通字體n風格(5種)qDEFAULT、DEFAULT_BOLD、MONOSPACE、SANS_SERIF、SERIFq默認字體、默認粗體、單間隔字體、無襯線字體、襯線字體浙江大學計算機學院Android菜單菜單nandroid提供了三種菜單類型,分別為options menu,context menu,sub menu。
noptions menu(主菜單)就是通過按home鍵來顯示,ncontext menu(右鍵菜單)在view上按上2s后顯示n兩種menu都有可以加入子菜單,子菜單不能種不能嵌套子菜單nandroid還提供了對菜單項進行分組的功能,可以把相似功能的菜單項分成同一個組,這樣可以通過調用setGroupCheckable,setGroupEnabled,setGroupVisible來設置菜單屬性,而無須單獨設置浙江大學計算機學院OptionMenu 1nOptionMenu(主菜單)qoptions menu最多只能在屏幕最下面顯示6個菜單選項,稱為icon menunicon menu不能有checkable選項q多于6的菜單項會以more icon menu來調出,稱為expanded menuqoptions menu通過activity的onCreateOptionsMenu來生成,q這個函數(shù)只會在menu第一次生成時調用n任何想改變options menu的想法只能在onPrepareOptionsMenu來實現(xiàn),這個函數(shù)會在menu顯示前調用qonOptionsItemSelected 用來處理選中的菜單項。
浙江大學計算機學院OptionMenu 2浙江大學計算機學院ContextMenu菜單菜單nContextMenu(右鍵菜單)qcontext menu是跟某個具體的view綁定在一起,在activity中用registerForContextMenu來為某個view注冊context menucontext menu在顯示前都會調用onCreateContextMenu來生成menuonContextItemSelected用來處理選中的菜單項浙江大學計算機學院SubmenunSubmenu(子菜單)q一個浮動菜單列表,通過在選項菜單或上下文菜單選擇菜單項顯露出來不支持嵌套子菜單浙江大學計算機學院ButtonnMain.xmlnButton事件響應show=(TextView)findViewById(R.id.TextView01);press=(Button)findViewById(R.id.Button01);press.setOnClickListener(new OnClickListener()public void onClick(View v)show.setText(Hi,Google Android!););浙江大學計算機學院進程優(yōu)先級順序進程優(yōu)先級順序n 前臺進程(Active Process):q前臺Activity、包含正在運行的廣播接收器、正在運行的服務n 可視進程(Visible Process):q包含一個可視化的Activityn 服務進程(Started Service Process):q包含一個被開啟的服務(處理服務,不是直接可視,例如媒體播放器,網(wǎng)絡上傳、下載)n 后臺進程(Background Process):q包含一個不可視的Activity(可以在任意時刻殺死該進程來回收內存)n 空進程(Empty Process):q沒有持有任何應用程序組件浙江大學計算機學院Activity狀態(tài)狀態(tài)1nactive:q當一個Activity 在屏幕的最上層時(對堆棧的最頂端),它就是屬于active 或者running 的狀態(tài)npaused:q如果一個Activity 失去焦點(focus)但還看得到它的畫面(比如:一個新的Activity 畫面并不是全屏幕或者它是一個半透明的情況),那失去焦點的Activity 則處在paused 的狀態(tài)。
像這個失去焦點的Activity它還是完全活著的,并沒有消失活著的意思是指,Activity 自己本身所有的狀態(tài)及數(shù)據(jù)都還是存在的,也跟窗口管理程序window manager 保持聯(lián)系著),像這種paused 的Activity,會在一種情況下消失,那就是當系統(tǒng)的內存不夠用之時,系統(tǒng)會自動判斷,將不重要的Activity 移除浙江大學計算機學院Activity狀態(tài)狀態(tài)2nstop:q如果一個Activity 被其它的Activity 完全的遮蓋住時,它仍然保有全部的狀態(tài)及數(shù)據(jù),但因為它已不再被使用者看見,所以它的畫面是被隱藏起來的(畫面不需要更新),當系統(tǒng)內存不足時,這種stop 狀態(tài)的Activity 時最先被系統(tǒng)考慮拿下來釋放內存的n finish:q當一個Activity 處于pause 或stop 的狀態(tài)時,系統(tǒng)可以要求Activity 結束(finish)或直接移除(kill)它當它需要再度呈現(xiàn)在使用者面前時,它必須要能完整的重新啟動及回復先前的狀態(tài)浙江大學計算機學院Activity狀態(tài)轉換狀態(tài)轉換nActivity狀態(tài)轉換浙江大學計算機學院Activity狀態(tài)管理狀態(tài)管理浙江大學計算機學院Active、PausednActive:qWhen an Activity is at the top of the stack,it is the visible,focused,foreground activity that is receiving user input.Android will attempt to keep it alive at all costs,killing Activities further down the stack as needed,to ensure that it has the resources it needs.When another Activity becomes active,this one will be paused.nPaused:qIn some cases,your Activity will be visible but will not have focus;at this point,its paused.This state is reached if a transparent or non-full-screen Activity is active in front of it.When paused,an Activity is treated as if it were active;however,it doesnt receive user input events.In extreme cases,Android will kill a paused Activity to recover resources for the active Activity.When an Activity becomes totally obscured,it becomes stopped.浙江大學計算機學院Stopped、InactivenStopped:qWhen an Activity isnt visible,it“stops.”The Activity will remain in memory retaining all state and member information;however,it is now a prime candidate for execution when the system requires memory elsewhere.When an Activity is stopped,its important to save data and the current UI state.Once an Activity has exited or closed,it becomes inactive.nInactive:qAfter an Activity has been killed,and before its been launched,its inactive.Inactive Activities have been removed from the Activity stack and need to be restarted before they can be displayed and used.浙江大學計算機學院服務服務(Service)n服務是運行在后臺的一段代碼。
它可以運行在它自己的進程,也可以運行在其他應用程序的上下文context里面,這取決于自身的需要其他的組件可以綁定到一個服務Service上面,通過遠程過程調用(RPC)來調用這個方法q例如:媒體播放器的服務,當用戶退出媒體選擇界面后,由服務Service來保證音樂繼續(xù)播放n如何使用服務q第一種是通過調用Context.startServece()啟動,調用Context.stoptService()結束,startService()可以傳遞參數(shù)給Serviceq第二種方式是通過調用Context.bindService()啟動,調用Context.unbindService()結束,q通過ServiceConnection 訪問Service二者可以混合使用,比如說我可以先startServece()再unbindService()浙江大學計算機學院Service的生命周期的生命周期nstartService():q啟動服務,直到調用stoptService(),或者Service調用stopSelf()停止nbindService():qService和調用bindService()的進程同生共死,也就是說當調用bindService()的進程死了,那么它bind 的Service 跟著結束,期間可以調用unbindService()解除綁定讓Service 結束n兩種方式混合使用。
浙江大學計算機學院使用服務進行音樂播放使用服務進行音樂播放nManifest.xml中的Service定義qqqqqqnService 子類中的Playerqpublic void onStart(Intent intent,int startId)qsuper.onStart(intent,startId);qplayer=MediaPlayer.create(this,R.raw.seven_days);qplayer.start();qqpublic void onDestroy()qsuper.onDestroy();qplayer.stop();qnActivity 中定義的Intent開啟相應的ServiceqstartService(new Intent(com.liangshan.wuyong.START_AUDIO_SERVICE);qstopService(new Intent(com.liangshan.wuyong.START_AUDIO_SERVICE);浙江大學計算機學院使用服務進行音樂播放使用服務進行音樂播放1nManifest.xml中的Service定義浙江大學計算機學院使用服務進行音樂播放使用服務進行音樂播放2nService子類中的Playerpublic void onStart(Intent intent,int startId)super.onStart(intent,startId);player=MediaPlayer.create(this,R.raw.seven_days);player.start();public void onDestroy()super.onDestroy();player.stop();浙江大學計算機學院使用服務進行音樂播放使用服務進行音樂播放3nActivity 中定義的Intent開啟相應的ServicestartService(new Intent(+id/START_AUDIO_SERVICE);stopService(new Intent(+id/START_AUDIO_SERVICE);浙江大學計算機學院添加添加Menu菜單菜單nMenu菜單public boolean onCreateOptionsMenu(Menu menu)/TODO Auto-generated method stubboolean result=super.onCreateOptionsMenu(menu);menu.add(0,INSERT_ID_Play,0,R.string.menu_toPlay);menu.add(0,INSERT_ID_Stop,0,R.string.menu_toStop);return result;/創(chuàng)建菜單浙江大學計算機學院IntentnIntent 是描述應用想要做什么,Intent 數(shù)據(jù)結構兩個最重要的部分是:q動作:典型的動作類型有:MAIN(活動的門戶)、VIEW、PICK、EDIT等。
q動作對應的數(shù)據(jù):以URI 的形式進行表示n例如:要查看某個人的聯(lián)系方式,你需要創(chuàng)建一個動作類型為VIEW 的Intent,以及一個表示這個人的URInAndroid 使用了Intent 這個特殊類,實現(xiàn)在屏幕與屏幕之間移動Intent 類用于描述一個應用將會做什么事浙江大學計算機學院IntentFilternintentfilter 則用于描述一個activity(或者IntentReceiver)能夠操作哪些intentq一個activity 如果要顯示一個人的聯(lián)系方式時,需要聲明一個IntentFilter,這個IntentFilter 要知道怎么去處理VIEW 動作和表示一個人的URInIntentFilter 需要在AndroidManifest.xml 中定義浙江大學計算機學院IntentFiltern通過解析各種intent,從一個屏幕導航到另一個屏幕是很簡單的q當向前導航時,activity 將會調用startActivity(IntentmyIntent)方法q然后,系統(tǒng)會在所有安裝的應用程序中定義的IntentFilter 中查找,找到最匹配Intent 對應的activity。
q新的activity 接收到通知后,開始運行q當startActivity 方法被調用將觸發(fā)解析Intent 的動作n這個機制提供了兩個關鍵好處:qActivities 能夠重復利用從其它組件中以Intent 的形式產生的一個請求;qActivities 可以在任何時候被一個具有相同IntentFilter 的新的Activity 取代浙江大學計算機學院IntentReceivernIntentReceiver 在AndroidManifest.xml 中注冊,也可在代碼中使用Context.registerReceiver()進行注冊n當一個intentreceiver 被觸發(fā)時,應用不必對請求調用intentreceiver,系統(tǒng)會在需要的時候啟動你的應用n各種應用還可以通過使用Context.broadcastIntent()將自己的intentreceiver 廣播給其它應用程序n當希望應用能夠對一個外部的事件(如電話呼入,數(shù)據(jù)網(wǎng)絡可用,或者某個定時)做出響應,可以使用一個Inte。