版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
智能手機應用開發(fā)基礎basedonandroid2011.7內(nèi)容包括:
1、Android平臺概述
2、搭建Android開發(fā)環(huán)境
3、第一個Android應用程序
4、Android用戶界面設計
5、Activity、Intent、Service、BroadcastReceiver
6、Android中的數(shù)據(jù)存取
7、Android的多媒體應用
8、應用實例:a、b、c、d課程結構開放手機聯(lián)盟(OHA)Android平臺綜述:平臺介紹、開發(fā)者社區(qū)開發(fā)環(huán)境:構建Android開發(fā)環(huán)境應用程序:應用程序結構典型應用:用戶界面、圖形編程數(shù)據(jù)存取、網(wǎng)絡連接硬件訪問平臺綜述開發(fā)環(huán)境程序結構數(shù)據(jù)存取網(wǎng)絡連接硬件訪問圖形編程用戶界面1、Android平臺概述aboutandroid開放手機聯(lián)盟開放手機聯(lián)盟(OpenHandsetAlliance):美國Google公司于2007年11月5日發(fā)起組建的一個全球性的聯(lián)盟組織。網(wǎng)址:聯(lián)盟支持Google可能發(fā)布的手機操作系統(tǒng)或者應用軟件,共同開發(fā)名為Android的開放源代碼的移動系統(tǒng)開放手機聯(lián)盟成員已達80家,包括五大類:手機制造商、手機芯片商移動運營商軟件開發(fā)商、軟件服務商聯(lián)盟創(chuàng)始成員Aplix、Ascender、Audience、Broadcom、中國移動、eBay、Esmertec、谷歌、宏達電、英特爾、KDDI、LivingImage、LG、Marvell、摩托羅拉、NMS、NTTDoCoMo、Nuance、Nvidia、PacketVideo、高通、三星、SiRF、SkyPop、SonicNetwork、SprintNextel、Synaptics、TAT、意大利電信、西班牙電信、德州儀器、T-Mobile和WindRiverGooglePhoneOHA與AndroidOHA是一個軟硬件開發(fā)者組織,包括Google,NTTDoCoMo,SprintNextel,andHTC…目標:加速智能移動設備的發(fā)展提供用戶更多更好更便宜的服務由OHA開發(fā)的Android?,是第一個完整的、開放的、免費的智能移動開發(fā)平臺。AndroidAndroid軟件系列包括操作系統(tǒng)、中間件和一些關鍵應用基于Linux2.6內(nèi)核,使用Java開發(fā)應用程序AndroidSDK提供多種開發(fā)所必要的工具與API特點2多媒體支持多種音頻、視頻格式GSMTelephony(hardwaredependent)支持藍牙Bluetooth,3G和WiFi支持照相機、GPS、指南針和加速度儀等傳感器硬件豐富的開發(fā)環(huán)境,包括模擬機、調(diào)試工具、內(nèi)存運行檢測,以及為EclipseIDE所寫的插件優(yōu)勢:開放性源代碼完全開放,便于開發(fā)人員更清楚的把握實現(xiàn)細節(jié),便于提高開發(fā)人員的技術水平,有利于開發(fā)出更具差異性的應用開放性對于Android的發(fā)展而言,有利于積累人氣,這里的人氣包括消費者和廠商,而對于消費者來講,最大的受益之處在于豐富的軟件資源開放的平臺也會帶來更多競爭,如此一來,消費者將可以用更低的價位購得手機優(yōu)勢:掙脫運營商的束縛在過去很長的一段時間,特別是在歐美地區(qū),手機應用往往受到運營商制約,使用什么功能接入什么網(wǎng)絡,幾乎都受到運營商的控制自從iPhone、GPhone上市,用戶可以更加方便地連接網(wǎng)絡,運營商的制約減少隨著2G至3G移動網(wǎng)絡的逐步過渡和提升,手機隨意接入網(wǎng)絡已不是運營商口中的笑談優(yōu)勢:不受限制的開發(fā)商采用了對有限內(nèi)存、電池和CPU優(yōu)化過的Dalvik虛擬機,Android的運行速度比想象的要快很多Android的源代碼遵循ApacheV2軟件許可,而不是通常的GPLv2許可,更有利于商業(yè)開發(fā)Android平臺提供給第三方開發(fā)商一個十分寬泛、自由的環(huán)境,催生各種新穎別致的應用軟件具有強大的Linux社區(qū)的支持優(yōu)勢:良好的盈利模式3-7開的盈利模式,使得產(chǎn)業(yè)鏈條的各方:運營商、制造商、獨立軟件生產(chǎn)商都可以獲得不錯的利益將移動終端的評價標準從硬件向軟件轉變,極大的激發(fā)了軟件開發(fā)者的熱情優(yōu)勢:無縫結合的Google應用Google成為最大的互聯(lián)網(wǎng)絡搜索引擎已經(jīng)有10多年歷史從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶Android平臺手機將無縫結合這些優(yōu)秀的Google服務系統(tǒng)環(huán)境AndroidSDK所支持的操作系統(tǒng):WindowsXP(32bit)orVista(32/64bit)MacOSX10.5.8orlater(x86only)Linux(testedonLinuxUbuntuDapperDrake)Android的系統(tǒng)架構LinuxKernelLinuxKernelLinux內(nèi)核位于硬件和軟件堆之間的抽象層核心服務:安全機制、內(nèi)存管理、進程管理、網(wǎng)絡、硬件驅動內(nèi)核扮演的是硬件層和系統(tǒng)其它層次之間的一個抽象層的概念操作系統(tǒng)的初始化和編程接口和標準Linux系統(tǒng)有所不同LibrariesLibrariesBionicLibc:Google自行開發(fā),未采用標準glibcFunctionLibrariesNativeServersHardwareAbstractionLibrariesFunctionLibrariesWebKit基于開源WebKit的瀏覽器支持CSS、Javascript、DOM、Ajax多媒體框架基于PacketVideoOpenCORE平臺支持標準音頻、視頻SQLite輕型數(shù)據(jù)庫,支持多種平臺NativeServers:Surface為多種應用提供2D、3D表面設計NativeServers:Audio音頻處理HardwareAbstractionLibraries硬件抽象層HALUserspaceC/C++librarylayer硬件接口驅動作用:隔離硬件接口與Android平臺邏輯AndoidRuntimeAndoidRuntime應用開發(fā)語言:JavaDalvik虛擬機指令:DalvikExcutableJava標準庫把Java代碼編譯為Dalvik可執(zhí)行文件(dex)AndoidRuntime核心庫提供的Java功能、Dalvik虛擬機依賴于Linux內(nèi)核可同時運行多個Dalvik虛擬機每個Android應用程序在它自己的DalvikVM實例中執(zhí)行優(yōu)化的Dalvik可執(zhí)行文件(.dex)Dx-工具把編譯過的Java文件轉換為dex文件DalvikVirtualMachineAndroidcustomimplementationvirtualmachineProvidesapplicationportabilityandruntimeconsistencyRunsoptimized(.dex)andDalvikbytecodeJava.class/.jarfilesconvertedto.dexatbuildtimeDesignedforembeddedenvironmentSupportsmultiplevirtualmachineprocessesperdeviceHighlyCPU-optimizedbytecodeinterpreterEfficientlyUsingruntimememoryCoreLibrariesCoreAPIsforJavalanguageprovideapowerful,yetsimpleandfamiliardevelopmentplatformDVMvs.JVMDVMGoogleDalvikexcutablebytecode對便攜設備有限的系統(tǒng)資源和供電進行了專門優(yōu)化JVMSunJavabytecode跨平臺ApplicationsFrameworkApplicationsFrameworkActivitymanager管理運行應用程序ContentProvider在各應用之間共享數(shù)據(jù)NotificationManager顯示用戶提示和狀態(tài)欄ViewsSystem可擴展顯示,用于構建UIApplicationsFramework核心應用:聯(lián)系人,郵件,電話,瀏覽器,日歷,地圖……充分訪問所有核心應用的API簡化組件的重用用Java編寫應用程序ApplicationsApplicationsJAVA編寫的應用程序程序員、軟件服務商……開發(fā)環(huán)境、工具IDE:EclipseEclipseplug-in:ADT(AndroidDevelopmentTools)SoftwareDevelopmentKit:AndroidSDKAndroidEmulator:AVD(AndroidVirtualDevice)Debuger:ADB(AndroidDebugBridge)DDMS(DalvikDebugMonitorService)Android版本歷史自1.5起,Android用甜點作為系統(tǒng)版本代號,按26個字母的數(shù)序:Android1.1:2008年9月,代表機型:HTCG1Android1.5Cupcake:2009年5月Android1.6Donut:2009年9月Android2.0Eclair:2009年10月Android2.1Eclair:2009年10月Android2.2Froyo:2010年5月20日Android2.3Gingerbread:2010年12月Android2.4IceCreamSandwich:即將發(fā)布Android3.0Honeycomb:2011年1月,針對平板設備的優(yōu)化最新消息2011年5月,在舊金山舉辦的I/O開發(fā)者大會上,Google展示了Android2.4版,側重于解決設備分散問題,統(tǒng)一手機平臺2011年7月,installer_r12開放下載可直接訪問2、搭建Android開發(fā)環(huán)境beforeandroid操作系統(tǒng)WindowsXP(32-bit)orVista(32/64-bit)MacOSX10.5.8orlater(x86only)Linux(testedonUbuntuDapperDrake)64-bitdistributionsmustbecapableofrunning32-bitapps開發(fā)包、工具軟件:JDK:(onlyJREnotenough)Eclipse:AndroidSDK:ADT:
QuickStart準備安裝JDK(version5or6)安裝Eclipse(version3.5andhigher)下載安裝SDKstarterpackage解壓starterpackage,修改系統(tǒng)變量PATH為Eclipse安裝ADT插件添加其它SDK組件運行AndroidSDKandAVDManager,選擇并在線安裝需要的開發(fā)包Done!安裝JavaJDK下載JDK安裝配置系統(tǒng)變量:新建JAVA_HOME:C:\ProgramFiles\Java\jdk1.6.0_25新建CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar修改PATH:將%JAVA_HOME%\bin;添加在原變量值前安裝Eclipse下載Eclipse解壓可選擇的Eclipse版本:EclipseIDEforJavaEEDevelopersEclipseIDEforJavaDevelopersEclipseClassic(versions3.5.1andhigher)
常用快捷鍵:ctrl+Shift+O importpackage更新ctrl+Shift+F 代碼自動排版ctrl+/ 設置代碼/注釋Android的SDK版本Android2.3.4Platform(new!)Android2.2PlatformAndroid2.1update1PlatformAndroid1.6PlatformAndroid1.5PlatformOlderPlatformsAndroid2.0.1PlatformAndroid2.0PlatformAndroid1.1Platform
據(jù)AndroidMarket的近兩周訪問統(tǒng)計,目前Android2.2占總訪問量的60%,而Android2.1和2.3.x均占18%,Android1.x僅為4%,當然這和Android1.x用戶可能近兩周沒有訪問Market有關。Android用戶數(shù)量統(tǒng)計(2011年7月5日)磁盤空間需求不包括JDK、Eclipse組件類型磁盤空間估算說明SDKTools50MB必須Androidplatform(each)150MB至少一個SDKAdd-on(each)100MB可選USBDriverforWindows10MBWindows下必備Samples(perplatform)20MB可選Offlinedocuments400MB可選安裝Android解壓后,在Eclipse中InstallNewSoftware…詳細步驟請參閱:Android開發(fā)環(huán)境搭建.docAndroid學習了解Android、OHA建立開發(fā)環(huán)境閱讀SDK文檔:<SDK>/docs/index.html動手實現(xiàn)Android編程實例背景知識JavaObjectOrientedProgramming設計模式Eclipse應用J2ME、Brew、Symbian(可選)3、第一個Android應用程序onandroidAndroid模擬器AndroidEmulator可模擬電話本、通話等功能內(nèi)置的瀏覽器和GoogleMaps都可以聯(lián)網(wǎng)可以使用PC鍵盤輸入(不包括小鍵盤)可使用模擬器按鍵、鍵盤輸入可以使用鼠標單擊、拖拽屏幕進行操作Android模擬器Android模擬器和真機的不同之處不支持呼叫和接聽實際來電,但可以通過控制臺模擬電話呼入和呼出不支持USB連接不支持相機、視頻捕捉不支持音頻輸入,但支持輸出不支持擴展耳機不能確定連接狀態(tài)不能確定電池電量水平和交流充電狀態(tài)不能確定SD卡的插入/彈出不支持藍牙模擬器在PC機上產(chǎn)生的臨時文件需要手工清理Android虛擬機DalvikDalvik和標準Java虛擬機(JVM)首要差別Dalvik基于寄存器,相對于基于數(shù)據(jù)棧的JVM,能夠更快的編譯較大的應用程序Dalvik和JVM運行環(huán)境的區(qū)別Dalvik經(jīng)過優(yōu)化,允許在有限的內(nèi)存中同時運行多個虛擬機的實例每一個Dalvik應用作為一個獨立的Linux進程執(zhí)行,可防止在某一虛擬機崩潰的時候所有應用都被關閉Dalvik提供一個擁有較少限制許可證的平臺Android中重要的包Android.app:提供高層的程序模型、提供基本的運行環(huán)境Android.content:包含各種的對設備上的數(shù)據(jù)進行訪問和發(fā)布的類Android.database:通過內(nèi)容提供者瀏覽和操作數(shù)據(jù)庫Android.graphics:底層的圖形庫,可以將它們直接繪制到屏幕上.Android.location:定位和相關服務的類Android.media:提供一些類管理多種音頻、視頻的媒體接口A:提供幫助網(wǎng)絡訪問的類,超過通常的.*接口Android.os:提供了系統(tǒng)服務、消息傳輸、IPC機制Android.opengl:提供OpenGL的工具Avider:提供類訪問Android的內(nèi)容提供者Android.telephony:提供與撥打電話相關的API交互Android.view:提供基礎的用戶界面接口框架Android.util:涉及工具性的方法,例如時間日期的操作Android.webkit:默認瀏覽器操作接口Android.widget:各UI元素(多數(shù)可見)在應用程序屏幕中使用Android的文件格式java文件:應用程序源代碼Android本身相當一部分都是用Java編寫而成Android的應用程序使用Java來開發(fā)class文件:Java編譯后的目標代碼Android使用Dalvik來運行應用程序Android的class文件是編譯過程中的中間目標文件,需要鏈接成dex文件才能在Dalvik上運行dex文件:Android平臺上的可執(zhí)行文件Dalvik虛擬機執(zhí)行的是dex格式字節(jié)碼,并非Java字節(jié)碼在編譯Java代碼之后,通過Android提供的Dx工具可以將Java字節(jié)碼轉換成dex字節(jié)碼Dalvik針對手機應用、嵌入式CPU做過優(yōu)化,可以同時運行多個VM實例而不占用過多系統(tǒng)資源apk文件:Android上的安裝文件apk是Android安裝包的擴展名,安裝包內(nèi)包含了與該Android應用程序相關的所有文件Android將AndroidManifest.xml文件、應用程序代碼(.dex文件)、資源文件和其他文件打成一個壓縮包,即.apkapk文件的本質是一個壓縮包,一個工程只能打進一個.apk包Android應用Android應用Activity:活動Android應用程序中最基本的組件,應用程序中一個Activity通常就是一個單獨的屏幕每一個活動都被實現(xiàn)為一個獨立的類,并且從活動基類中繼承而來,活動類將會顯示由視圖控件組成的用戶接口,并對事件做出響應大多數(shù)的應用是由多個屏幕顯示組成示例:Helloworld!onandroidHelloWorldEclipse下自動生成newandroidproject→HelloWorldHelloWorld.javaJava程序packagetest.helloworld;importandroid.app.Activity;importandroid.os.Bundle;publicclassHelloWorldextendsActivity{/**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);}}返回R.javaJava程序/*AUTO-GENERATEDFILE.DONOTMODIFY.*/packagetest.helloworld;publicfinalclassR{publicstaticfinalclassattr{}publicstaticfinalclassdrawable{publicstaticfinalinticon=0x7f020000;}publicstaticfinalclasslayout{publicstaticfinalintmain=0x7f030000;}publicstaticfinalclassstring{publicstaticfinalintapp_name=0x7f040001;publicstaticfinalinthello=0x7f040000;}}返回main.xmlxml文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android=""android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"/></LinearLayout>Resources返回strings.xmlxml文件<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello">HelloWorld,everyone!</string><stringname="app_name">HelloWorld</string></resources>顯示內(nèi)容:HelloWorld,everyone!AndroidManifest.xmlxml文件<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android=“”
package="test.helloworld“android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="7"/><applicationandroid:icon="@drawable/icon" android:label="@string/app_name"><activityandroid:name=
".HelloWorld“android:label="@string/app_name"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name=
"ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>返回RUNRUN模擬器運行顯示內(nèi)容:HelloWorld,everyone!命令行方式首先啟動模擬器 emulator-avdSDK_2.1_Update1_API_7然后連接模擬器: telnetlocalhost5554接下來,就可以撥打電話: gsmcall10086或者是發(fā)送短信: smssend10086messagefrom10086另:adbkill-server:關掉現(xiàn)有adbServeradbdevices:顯示運行中的設備屏幕分辨率入門級的: QVGA(320x240)主流的: HVGA(480x320)主流的: WVGA800(800x480)moto特有的: WVGA854(854x480)魅族M9: 960x640三星GalaxyTabP1000:1024x600(7寸屏)基準分辨率: VGA(640x480)HVGA-L或是-P:橫屏、豎屏模擬器的默認分辨率依SDK版本而不同Androidproject的目錄結構文件夾src文件夾gen文件夾Android2.1-update1文件夾assets文件夾resAndroidManifest.xmlpertiesproguard.cfg項目HelloWorld:Androidproject:src該文件夾是存放項目的源代碼。新建項目時,系統(tǒng)生成了一個HelloWorld.java
文件,它導入了兩個類android.app.Activity和android.os.Bundle,HelloWorld類繼承自Activity且重寫了onCreate方法。@Override:在方法前面加上@Override系統(tǒng)可以幫助檢查方法的正確性。例如,publicvoidonCreate(……){……}這種寫法是正確的,如果寫成publicvoidoncreate(……){……}這樣編譯器會報錯——Themethodoncreate(Bundle)oftypeHelloWorldmustoverrideorimplementasupertypemethod,以確保你正確重寫onCreate方法。如果不加@Override,則編譯器會認為是新定義了一個方法oncreate,檢測不出書寫錯誤。android.app.Activity類:因為幾乎所有的Activity都是與用戶交互的,所以該類關注創(chuàng)建窗口,可以用方法setContentView(View)將自定義的UI放到Activity里面。有兩個方法是幾乎所有的Activity子類都實現(xiàn)的: onCreate(Bundle):初始化Activity,用布局資源(layoutresource)調(diào)用setContentView(int)方法定義UI(main.xml)。 onPause():處理當離開該Activity時要做的事情,用戶做的所有改變應該在這里提交(通常ContentProvider保存數(shù)據(jù))。android.os.Bundle類:從字符串值映射各種可打包的(Parcelable)類型Bundle:捆綁
例如該類提供了公有方法:publicbooleancontainKey(Stringkey),如果給定的key包含在Bundle的映射中返回true,否則返回false。Androidproject:gen該文件夾下面有一個項目創(chuàng)建時自動生成并實時更新的R.java文件,這個文件是只讀的,不允許修改。R.java文件中定義了一個類R,類中包含很多靜態(tài)類,且靜態(tài)類的名字都與res中的一個名字對應,即R類定義了res目錄下所有資源的索引。通過R.java程序可以很快地查找到需要的資源,另外通過檢查R.java列表,編譯器不會將沒有被使用到的資源編譯進應用程序包中,以減少手機中的空間占用。R:資源索引類Androidproject:Android2.1-update1該文件夾下包含Java歸檔文件android.jar,包含了構建項目所需的所有的AndroidSDK庫和APIs。通過android.jar將應用程序綁定到AndroidSDK和AndroidEmulator,這使得項目可以使用所有Android的庫和包,并且可以在適當?shù)沫h(huán)境中調(diào)試。例如HelloWorld.java通過下面兩行代碼從android.jar導入了兩個包: importandroid.app.Activity; importandroid.os.Bundle;Androidproject:res資源目錄,包含項目中的資源文件并將其編譯進程序包中。向此目錄添加資源時,會被R.java自動索引。res中默認有三個子目錄:drawabel、layout、valuesdrawabel:包含應用程序可以用的圖標、圖像文件(*.png、*.jpg)layout:界面布局文件(main.xml)等values:項目中所需要顯示的各種文字??梢源娣哦鄠€*.xml文件,還可以存放不同類型的數(shù)據(jù),如arrays.xml、colors.xml、dimens.xml、styles.xmlAndroidproject:assets該文件夾包含項目所需要使用到的諸如mp3、視頻文件,存放的也是資源文件。與res文件夾存放的資源不同的是,assets內(nèi)的資源文件不會被R類索引,不能使用R的成員引用方式進行訪問。Androidproject:AndroidManifest.xml項目的總配置文件,存儲整個項目的配置數(shù)據(jù),記錄了應用程序中所使用的各種組件,列出了應用程序所提供的功能,指出了應用程序使用到的服務(如電話、互聯(lián)網(wǎng)、短信、GPS等)應用程序添加新的Activity時,也需在此注冊后才能調(diào)用AndroidManifest.xml包含如下設置: application、permissions、Activities、Intentfilters等Androidproject:perties由AndroidTools自動生成,不允許修改文件中記錄了項目中所需要的環(huán)境信息,比如AndroidAPI的最低兼容版本等項目HelloWorld的perties文件代碼如下所示: #Projecttarget. target=android-7Androidproject:proguard.cfgproguard是Java類文件的壓縮、優(yōu)化、混淆器,用于刪除沒有用的類、字段、方法與屬性,以使字節(jié)碼達到最大程度地優(yōu)化作為配置文件,proguard.cfg是\android-sdk-windows\tools\lib\目錄下的同名文件的副本proguard.cfg是在AndroidSDK升級到2.3版后才出現(xiàn)的,同樣不需要手工修改4、Android用戶界面設計onandroidUserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:布局管理Layout所有UI類均源于View、ViewGroup,View的子類稱為組件(Widget),ViewGroup的子類稱為布局(Layout)ViewGroup通過各種Layout,控制所屬View的顯示位置,形成圖示的組合設計模式(Composite):ViewGroup(Layout)ViewViewViewViewViewViewGroup(Layout)UI:布局管理LayoutLayout:組件在Activity中的呈現(xiàn)方式即為”布局”,布局中需要描述組件的大小、間距、對齊方式等Layout的創(chuàng)建:首先將需要呈現(xiàn)的組件在xml配置文件中進行聲明然后在程序中通過setContentView(View)方法將視圖呈現(xiàn)在Activity中最后在程序中通過findViewById(Id)方法獲得各組件實例UI:Layout的種類LinearLayoutFrameLayoutTableLayoutRelativeLayoutAbsoluteLayoutListLayoutRadioGroupGridView………實例:TextView、Button、ImageView等各個組件按線性布局垂直擺放線性布局LinearLayoutUI:LinearLayout線性布局LinearLayout方向:android:orientation="vertical"android:orientation="horizontal"對齊:android:gravity="top" (bottom/left/right)大?。篴ndroid:layout_width="wrap_content"android:layout_width="fill_parent"<LinearLayoutxmlns:android=""android:orientation="vertical"
android:gravity="left"android:layout_width="fill_parent"android:layout_height="fill_parent">UI:FrameLayout從屏幕左上角(0,0)坐標開始布局所有組件都釘?shù)狡聊坏淖笊辖遣荒転榻M件指定位置,所有組件均在(0,0)坐標放置多個組件層疊排序,后面的組件覆蓋前面的組件UI:TableLayout以行、列表格的形式布局各組件使用TableRow對象來定義多行單元格不能橫跨行不顯示行、列或是單元格邊界線UI:AbsoluteLayout需明確指明各組件確切的屏幕坐標(X,Y)(0,0)為左上角,組件下移或右移時,坐標值增加注意:通常不建議使用AbsoluteLayout,因為絕對布局在不同尺寸和分辨率的設備顯示中不能很好地工作Android2.0API文檔中標示該布局已過時UI:RelativeLayout指明各組件相對于其他組件(通過Id)或相對于父布局對象的位置,跟AbsoluteLayout相反在RelativeLayout布局里的各控件具備多種排列屬性:Layoutabove:控件在指定控件的上方Layoutbelow:控件在指定控件的下方Layouttoleftof……使用RelativeLayout布局的時候,程序運行時應盡量不去更改各組件的相對布局,以免組件間布局沖突UserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:事件處理機制延用了Java的事件處理機制,Android中事件處理同樣包括三個部分:事件源:產(chǎn)生事件的組件、硬件、資源等事件:單擊事件、按鍵事件等事件監(jiān)聽器:Listener,用于監(jiān)聽事件的發(fā)生UI:Listener常用的事件處理方法:OnClickListener()OnFocusChangeListener()button0=(Button)findViewById(R.id.button0);button0.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubIntentintent=newIntent(MainActivity.this,Common_Widget_Test.class);startActivity(intent);}});UserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:關于Icon應用程序需要各種各樣的圖標:icon文件icons要有多樣化的形狀和樣式,但又要形成統(tǒng)一的視覺風格,其尺寸和定位也需要統(tǒng)一:紅色邊框為圖標尺寸藍色邊框是圖形尺寸,比圖標尺寸稍小,圖形之外的空間用于顯示陰影和特殊效果橙色邊框是另外一種圖形尺寸。兩種類型的圖形尺寸可以達到統(tǒng)一的視覺權重UI:Icon的風格符合當下的流行趨勢,避免過度使用隱喻高度簡化和夸張,小尺寸圖標也能易于識別,不宜太復雜嘗試抓住程序的主要特征,比如音像作為音樂的icon使用自然的輪廓和形狀,看起來幾何化和有機化,不失真實感。采用前視角,幾乎沒有透視,光源在頂部。不光滑但富有質感。UserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:關于MenuAndroid系統(tǒng)提供三種菜單:optionsmenu(選項菜單)通過點擊MENU鍵來顯示contextmenu(上下文菜單)在某View上長按2s后顯示submenu(子菜單)顯示為浮動列表,在以上兩種菜單的菜單項被選中時顯示出來;前二者都有可以嵌套子菜單,而子菜單本身不能再嵌套Android系統(tǒng)具備對菜單項進行分組的功能,可以把相似功能的菜單項分成同一個組;菜單項分組后,可以調(diào)用setGroupCheckable、setGroupEnabled、setGroupVisible等方法來統(tǒng)一設置整個菜單項分組的屬性,而無須一個一個單獨設置UI:optionsmenu主菜單optionsmenu顯示在屏幕下方,最多只能顯示6個菜單項,稱為iconmenu(不支持checkable屬性);其余菜單項會以moreiconmenu來調(diào)出,稱為expandedmenuoptionsmenu通過Activity的onCreateOptionsMenu方法來生成,這個函數(shù)只會在menu第一次生成時調(diào)用可在menu顯示前調(diào)用onPrepareOptionsMenu方法來實現(xiàn)對菜單的更改onOptionsItemSelected方法在選中菜單項后被調(diào)用,實現(xiàn)菜單項的響應UI:submenu子菜單一個浮動菜單列表,通過在選項菜單或上下文菜單選擇菜單項顯露出來不支持嵌套子菜單<menuxmlns:android=""><itemandroid:title="File"android:icon="@drawable/icon_file"><menu><groupandroid:id="@+id/group_file"android:checkableBehavior="none"><itemandroid:id="@+id/newfile"android:title="NewFile"></item>//其他的item定義
</group></menu></item>//其他的item定義</menu>實例:Test_of_WidgetMainActivity.java中指定主菜單xml文件重寫onOptionsItemSelected()方法publicbooleanonCreateOptionsMenu(Menumenu){menuInflater.inflate(R.menu.menu_,menu);returntrue;}publicbooleanonOptionsItemSelected(MenuItemitem){switch(item.getItemId()){caseR.id.about:aboutAlert("使用xml實現(xiàn)菜單");break;caseR.id.exit:exitAlert("確認要退出嗎?");break;}returntrue;}privatevoidaboutAlert(Stringmsg){……
}privatevoidexitAlert(Stringmsg){……
}\res\menu\menu_定義菜單<?xmlversion="1.0"encoding="utf-8"?><menuxmlns:android=""><itemandroid:title="File"android:icon="@drawable/icon_file">...</item><itemandroid:title="Help"android:icon="@drawable/icon_help"><menu><groupandroid:checkableBehavior="none"><itemandroid:id="@+id/about"android:title="About"android:alphabeticShortcut="a"></item><itemandroid:id="@+id/exit"android:title="Exit"android:alphabeticShortcut="x"></item></group></menu></item></menu>運行結果:運行結果:UI:contextmenu右鍵菜單contextmenu是跟某個具體的View綁定在一起的在Activity中用registerForContextMenu方法來為某個View注冊contextmenucontextmenu在顯示前都會調(diào)用onCreateContextMenu方法來生成menu@OverridepublicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenuInfomenuInfo){menu.add(0,ITME1,0,"紅色背景");menu.add(0,ITME2,0,"綠色背景");menu.add(0,ITME3,0,"藍色背景");}registerForContextMenu(textView00);onContextItemSelected方法處理菜單項選中事件@OverridepublicbooleanonContextItemSelected(MenuItemitem){//TODOAuto-generatedmethodstubswitch(item.getItemId()){caseITEM1:textView00.setBackgroundColor(Color.RED);break;caseITEM2:textView00.setBackgroundColor(Color.GREEN);break;caseITEM3:textView00.setBackgroundColor(Color.BLUE);break;}returntrue;}privatestaticfinalintITEM1=Menu.FIRST;privatestaticfinalintITEM2=Menu.FIRST+1;privatestaticfinalintITEM3=Menu.FIRST+2;運行結果:UserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:關于DialogAndroid中對話框主要有:普通對話框、選項對話框、單選多選對話框、進度對話框、日期對話框、時間對話框等在程序中可以通過方法onCreateDialog來完成對話框的創(chuàng)建,調(diào)用showDialog方法傳入對話框的id來顯示指定對話框關閉對話框可用dismiss方法實現(xiàn),也可以調(diào)用removeDialog方法來徹底釋放對話框onDismissListener方法可在關閉對話框時執(zhí)行一些特定工作實例:Test_of_Widgetbutton1.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){showDialog(0);}});protectedDialogonCreateDialog(intid){ProgressDialogpD=newProgressDialog(this);pD.setIcon(R.drawable.icon);pD.setTitle("ProgressDialog測試");pD.setIndeterminate(true);pD.setMessage("我只是測試代碼,看看....");pD.setCancelable(true);pD.setButton(Dialog.BUTTON_POSITIVE,"確定",newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intwhich){dialog.cancel();}});returnpD;}UI:DialogUI:DialogUserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:關于ToastToast:
當用戶執(zhí)行某一動作后,系統(tǒng)自動顯示提示信息,顯示一段時間后自動消失,是為“Toast”程序中創(chuàng)建Toast:調(diào)用Toast的靜態(tài)方法makeText()設置現(xiàn)實文本和時長調(diào)用Toast的show()方法顯示實例:Test_of_Stringfinalintl=Toast.LENGTH_LONG;finalints=Toast.LENGTH_SHORT;finalStrings1="我會多顯示一會兒,呵呵";finalStrings2="我少顯示一會兒,呵呵";button1.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){Toastt1=Toast.makeText(getApplicationContext(),s1,l);t1.show();}});button2.setOnClickListener(newOnClickListener(){publicvoidonClick(Viewv){Toastt2=Toast.makeText(getApplicationContext(),s2,s);t2.show();}});實例:Test_of_ToastUserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:關于Style&Theme風格(style),是指能應用于布局文件中的單一組件的一套格式屬性集合。比如為一個TextView組件定義一套風格并在其中指定字體的大小和顏色。主題(theme),是指能應用于一個或者多個Activity的一套格式屬性的集合。比如定義一個主題,指定窗口框架顏色和面板的前景色和背景色,并且為菜單指定字體的顏色和大小,應用于一個Activity。UI:Style<resources>
<style
name="mytextstyle"
>
<item
name="android:textSize">30px</item>
<item
name="android:textColor">#FFFF0000</item>
<item
name="android:textStyle">bold</item><item
name="android:typeface">serif
</item>
</style>
</resources>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
style="@style/mytextstyle"
/>
設置字體、字號、顏色、加粗UI:Theme<resources><stylename="myTransparent"><itemname="android:windowBackground">@drawable/bg</item><itemname="android:windowFrame">@null</item><itemname="android:windowNoTitle">true</item><itemname="android:colorForeground">#fff</item><itemname="android:windowFullscreen">true</item></style></resources>//僅應用到單一Activity <activity
android:theme=“@style/myTransparent”>
//應用到整個程序所有Activity
<application
android:theme=“@style/myTransparent”>設置背景圖片、無窗口框、無標題、設置前景色、全屏UI:Color常量android.graphics.Color中定義了顏色值Color.BLACKColor.BLUEColor.CYANColor.DKGRAYColor.GRAYColor.GREENColor.LTGRAYColor.MAGENTAColor.REDColor.TRANSPARENTColor.WHITEColor.YELLOWUserInterface:用戶界面UI布局管理、事件響應機制:Java的UI設計思想布局管理Layout事件響應Listener圖標Icon菜單Menu對話Dialog提示Toast風格和主題定制組件WidgetUI:關于WidgetWidget是Android1.5引入的新特性,允許程序顯示一些常用而又重要的信息在用戶的桌面主屏上標準的Android系統(tǒng)映像包含了一些示例widgets,包括指針時鐘、音樂播放器和其他工具如Google搜索欄Widget即是可由用戶自己編寫的功能控件用戶在主屏幕(HomeScreen)的空白區(qū)域長按,選擇菜單的Widgets項,即可選取所需的控件顯示在主屏幕上用戶可自行設計一個Widget,使得和其它Widget以及主屏幕其它元素保持風格一致UI:Widget設計典型的AndroidWidget主要有三個組成部分:一個限位框,一個框架,還有Widget的圖形控件以及其它元素設計周全的Widget會在限位框邊緣與框架之間,及框架內(nèi)邊緣與Widget的控件之間都保留一些內(nèi)填充(內(nèi)補白)Widget的外觀應被設計得與主屏幕的其它Widget相匹配,并以主屏幕的其它元素為依據(jù)對齊,也應使用標準的陰影效果更多信息,可參考開發(fā)者指南的AppWidgets章節(jié)UI:不同方向的Widget5、Activity,Intent,Service,BroadcastReceiver,onandroidActivityIntentServiceBroadcastReceiverActivity:窗口Android應用程序中最基本的組件,應用程序中一個Activity通常就是一個單獨的屏幕、窗口每一個活動都被實現(xiàn)為一個獨立的類,并且從活動基類中繼承而來,活動類將會顯示由視圖控件組成的用戶接口,并對事件做出響應大多數(shù)的應用是由多個屏幕顯示組成在某些情況下當前的屏幕也許需要向上一個屏幕活動提供返回值,比如讓用戶從手機中挑選一張照片返回通訊錄做為電話撥入者的頭像Activity的生命周期onCreate()onStart()onResume()onPause()onStop()onRestart()onDestroy()Activity的狀態(tài)①active:當一個Activity在屏幕的最上層時(Activity棧的最頂端),處在active或者running狀態(tài)②paused:如果一個Activity失去焦點(focus)但還看得到它的畫面,則處在paused狀態(tài)。此時該Activity本身所有的狀態(tài)及數(shù)據(jù)都還是存在的,也跟窗口管理程序windowmanager保持著聯(lián)系著③stop:如果一個Activity被其它的Activity完全的遮蓋住時,處于stop狀態(tài),它仍然保有全部的狀態(tài)及數(shù)據(jù),但因為它已不再被使用者看見,畫面不再需要更新Activity:狀態(tài)轉換與生命周期Android的進程優(yōu)先級前臺進程(ActiveProcess):前臺Activity、包含正在運行的廣播接收器、正在運行的服務可視進程(VisibleProcess):包含一個可視化的Activity服務進程(StartedServiceProcess):包含一個被開啟的服務(處理服務,不是直接可視,例如媒體播放器,網(wǎng)絡上傳、下載等)后臺進程(BackgroundProcess):包含一個不可視的Activity(隨時可以結束該進程來回收內(nèi)存)空進程(EmptyProcess):沒有持有任何應用程序組件高低ActivityIntentServiceBroadcastReceiverIntent:組件之間的使者Intent:不同組件之間通信的“媒介”,用于描述程序想要做什么Intent可以包括:動作Action數(shù)據(jù)Data,以URI的形式表示分類Category類型Type組件Component擴展信息Extra常用于啟動新的Activty、Service或是發(fā)起新的Broadcast等用于啟動一個新的Activity,實現(xiàn)多個Activity間的切換定義并實例化一個Intent調(diào)用startActivity()方法啟動新的Activitybutton0=(Button)findViewById(R.id.button0);button0.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubIntentintent=newIntent(MainActivity.this,Common_Widget_Test.class);startActivity(intent);}});實例:Test_of_Intent_Action給uri賦值、并設為Intent的數(shù)據(jù)Data設置Intent的動作Action調(diào)用startActivity()轉向新的窗口,Intent中指明了新Activity的信息case0:string="tel:5556";uri=Uri.parse(string);intent.setAction(Intent.ACTION_DIAL);intent.setData(uri);this.startActivity(intent);break;case1:string="tel:5556";uri=Uri.parse(string);intent.setAction(Intent.ACTION_CALL);intent.setData(uri);this.startActivity(intent);break;case2:string="";uri=Uri.parse(string);intent.setAction(Intent.ACTION_VIEW);intent.setData(uri);this.startActivity(intent);break;運行結果:運行結果:IntentFilter用于描述該Activity能夠操作哪些IntentIntentFilter需要在AndroidManifest.xml中定義<activityandroid:name=".HelloWorld“android:label="@string/app_name"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name=
"ent.category.LAUNCHER"/></intent-filter></activity>程序主界面啟動時顯示IntentReceiverIntentReceiver在AndroidManifest.xml中注冊,也可在代碼中使用Context.registerReceiver()進行注冊當一個IntentReceiver被觸發(fā)時,系統(tǒng)會在需要的時候啟動程序各種應用還可以通過使用Context.broadcastIntent()將自己的IntentReceiver廣播給其它應用程序雖然IntentReceiver在指定的事件發(fā)生時,會使用NotificationManager通知用戶,但并不生成一個UIActivityIntentServiceBroadcastReceiverService:后臺服務后臺運行,幾乎不與用戶交互,沒有可視化界面與Activity一樣,同屬Android基本組件同樣需要在AndroidManifest.xml中注冊<service android:name=".Runnable_Service" android:exported="true" android:process=":remote"></service>Service:后臺服務每一個服務均繼承自父類Service同樣以startService()方法啟動服務button1=(Button)findViewById(R.id.button1);button1.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){Intentintent1=newIntent(Runnable_Service_Test.this,Runnable_Service.class);intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_T
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年東莞市智慧城市建設項目合同
- 大學生食堂營養(yǎng)均衡方案
- (2024版)物聯(lián)網(wǎng)技術在農(nóng)業(yè)應用研發(fā)合同
- 2024年創(chuàng)意設計外包合同
- 2024年個人租賃轎車合同
- 隧道工程網(wǎng)架施工管理方案
- 電商平臺消費者反饋處理方案
- 濟南大學《自閉癥兒童的干預》2021-2022學年第一學期期末試卷
- 大型活動場所給排水管網(wǎng)方案
- 智能家居硬件和軟件設施工方案
- 主要負責人和安全生產(chǎn)管理人員安全培訓課件初訓修訂版
- 人教版2024新版八年級全一冊信息技術第1課 開啟物聯(lián)網(wǎng)之門 教學設計
- 2024220kV 預制艙式模塊化海上風電升壓站
- 2024秋期國家開放大學《國家開放大學學習指南》一平臺在線形考(任務一)試題及答案
- 2024年新人教版道德與法治一年級上冊 9 作息有規(guī)律 教學課件
- 2024新人教版道法一年級上冊第二單元:過好校園生活大單元整體教學設計
- 2024年深圳技能大賽-鴻蒙移動應用開發(fā)(計算機程序設計員)職業(yè)技能競賽初賽理論知識
- 大數(shù)據(jù)與會計專業(yè)實習報告?zhèn)€人小結
- 人教版初中生物新舊教材對比與分析
- 教師資格考試《高中地理專業(yè)面試》真題一
- 肩胛背神經(jīng)卡壓綜合征
評論
0/150
提交評論