版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能手机应用开发基础basedonandroid2011.7内容包括:
1、Android平台概述
2、搭建Android开发环境
3、第一个Android应用程序
4、Android用户界面设计
5、Activity、Intent、Service、BroadcastReceiver
6、Android中的数据存取
7、Android的多媒体应用
8、应用实例:a、b、c、d课程结构开放手机联盟(OHA)Android平台综述:平台介绍、开发者社区开发环境:构建Android开发环境应用程序:应用程序结构典型应用:用户界面、图形编程数据存取、网络连接硬件访问平台综述开发环境程序结构数据存取网络连接硬件访问图形编程用户界面1、Android平台概述aboutandroid开放手机联盟开放手机联盟(OpenHandsetAlliance):美国Google公司于2007年11月5日发起组建的一个全球性的联盟组织。网址:联盟支持Google可能发布的手机操作系统或者应用软件,共同开发名为Android的开放源代码的移动系统开放手机联盟成员已达80家,包括五大类:手机制造商、手机芯片商移动运营商软件开发商、软件服务商联盟创始成员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是一个软硬件开发者组织,包括Google,NTTDoCoMo,SprintNextel,andHTC…目标:加速智能移动设备的发展提供用户更多更好更便宜的服务由OHA开发的Android™,是第一个完整的、开放的、免费的智能移动开发平台。AndroidAndroid软件系列包括操作系统、中间件和一些关键应用基于Linux2.6内核,使用Java开发应用程序AndroidSDK提供多种开发所必要的工具与API特点2多媒体支持多种音频、视频格式GSMTelephony(hardwaredependent)支持蓝牙Bluetooth,3G和WiFi支持照相机、GPS、指南针和加速度仪等传感器硬件丰富的开发环境,包括模拟机、调试工具、内存运行检测,以及为EclipseIDE所写的插件优势:开放性源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发出更具差异性的应用开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益之处在于丰富的软件资源开放的平台也会带来更多竞争,如此一来,消费者将可以用更低的价位购得手机优势:挣脱运营商的束缚在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制自从iPhone、GPhone上市,用户可以更加方便地连接网络,运营商的制约减少随着2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈优势:不受限制的开发商采用了对有限内存、电池和CPU优化过的Dalvik虚拟机,Android的运行速度比想象的要快很多Android的源代码遵循ApacheV2软件许可,而不是通常的GPLv2许可,更有利于商业开发Android平台提供给第三方开发商一个十分宽泛、自由的环境,催生各种新颖别致的应用软件具有强大的Linux社区的支持优势:良好的盈利模式3-7开的盈利模式,使得产业链条的各方:运营商、制造商、独立软件生产商都可以获得不错的利益将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情优势:无缝结合的Google应用Google成为最大的互联网络搜索引擎已经有10多年历史从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带Android平台手机将无缝结合这些优秀的Google服务系统环境AndroidSDK所支持的操作系统:WindowsXP(32bit)orVista(32/64bit)MacOSX10.5.8orlater(x86only)Linux(testedonLinuxUbuntuDapperDrake)Android的系统架构LinuxKernelLinuxKernelLinux内核位于硬件和软件堆之间的抽象层核心服务:安全机制、内存管理、进程管理、网络、硬件驱动内核扮演的是硬件层和系统其它层次之间的一个抽象层的概念操作系统的初始化和编程接口和标准Linux系统有所不同LibrariesLibrariesBionicLibc:Google自行开发,未采用标准glibcFunctionLibrariesNativeServersHardwareAbstractionLibrariesFunctionLibrariesWebKit基于开源WebKit的浏览器支持CSS、Javascript、DOM、Ajax多媒体框架基于PacketVideoOpenCORE平台支持标准音频、视频SQLite轻型数据库,支持多种平台NativeServers:Surface为多种应用提供2D、3D表面设计NativeServers:Audio音频处理HardwareAbstractionLibraries硬件抽象层HALUserspaceC/C++librarylayer硬件接口驱动作用:隔离硬件接口与Android平台逻辑AndoidRuntimeAndoidRuntime应用开发语言:JavaDalvik虚拟机指令:DalvikExcutableJava标准库把Java代码编译为Dalvik可执行文件(dex)AndoidRuntime核心库提供的Java功能、Dalvik虚拟机依赖于Linux内核可同时运行多个Dalvik虚拟机每个Android应用程序在它自己的DalvikVM实例中执行优化的Dalvik可执行文件(.dex)Dx-工具把编译过的Java文件转换为dex文件DalvikVirtualMachineAndroidcustomimplementationvirtualmachineProvidesapplicationportabilityandruntimeconsistencyRunsoptimized(.dex)andDalvikbytecodeJava.class/.jarfilesconvertedto.dexatbuildtimeDesignedforembeddedenvironmentSupportsmultiplevirtualmachineprocessesperdeviceHighlyCPU-optimizedbytecodeinterpreterEfficientlyUsingruntimememoryCoreLibrariesCoreAPIsforJavalanguageprovideapowerful,yetsimpleandfamiliardevelopmentplatformDVMvs.JVMDVMGoogleDalvikexcutablebytecode对便携设备有限的系统资源和供电进行了专门优化JVMSunJavabytecode跨平台ApplicationsFrameworkApplicationsFrameworkActivitymanager管理运行应用程序ContentProvider在各应用之间共享数据NotificationManager显示用户提示和状态栏ViewsSystem可扩展显示,用于构建UIApplicationsFramework核心应用:联系人,邮件,电话,浏览器,日历,地图……充分访问所有核心应用的API简化组件的重用用Java编写应用程序ApplicationsApplicationsJAVA编写的应用程序程序员、软件服务商……开发环境、工具IDE:EclipseEclipseplug-in:ADT(AndroidDevelopmentTools)SoftwareDevelopmentKit:AndroidSDKAndroidEmulator:AVD(AndroidVirtualDevice)Debuger:ADB(AndroidDebugBridge)DDMS(DalvikDebugMonitorService)Android版本历史自1.5起,Android用甜点作为系统版本代号,按26个字母的数序: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:即将发布Android3.0Honeycomb:2011年1月,针对平板设备的优化最新消息2011年5月,在旧金山举办的I/O开发者大会上,Google展示了Android2.4版,侧重于解决设备分散问题,统一手机平台2011年7月,installer_r12开放下载可直接访问2、搭建Android开发环境beforeandroid操作系统WindowsXP(32-bit)orVista(32/64-bit)MacOSX10.5.8orlater(x86only)Linux(testedonUbuntuDapperDrake)64-bitdistributionsmustbecapableofrunning32-bitapps开发包、工具软件:JDK:(onlyJREnotenough)Eclipse:AndroidSDK:ADT:
QuickStart准备安装JDK(version5or6)安装Eclipse(version3.5andhigher)下载安装SDKstarterpackage解压starterpackage,修改系统变量PATH为Eclipse安装ADT插件添加其它SDK组件运行AndroidSDKandAVDManager,选择并在线安装需要的开发包Done!安装JavaJDK下载JDK安装配置系统变量:新建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
据AndroidMarket的近两周访问统计,目前Android2.2占总访问量的60%,而Android2.1和2.3.x均占18%,Android1.x仅为4%,当然这和Android1.x用户可能近两周没有访问Market有关。Android用户数量统计(2011年7月5日)磁盘空间需求不包括JDK、Eclipse组件类型磁盘空间估算说明SDKTools50MB必须Androidplatform(each)150MB至少一个SDKAdd-on(each)100MB可选USBDriverforWindows10MBWindows下必备Samples(perplatform)20MB可选Offlinedocuments400MB可选安装Android解压后,在Eclipse中InstallNewSoftware…详细步骤请参阅:Android开发环境搭建.docAndroid学习了解Android、OHA建立开发环境阅读SDK文档:<SDK>/docs/index.html动手实现Android编程实例背景知识JavaObjectOrientedProgramming设计模式Eclipse应用J2ME、Brew、Symbian(可选)3、第一个Android应用程序onandroidAndroid模拟器AndroidEmulator可模拟电话本、通话等功能内置的浏览器和GoogleMaps都可以联网可以使用PC键盘输入(不包括小键盘)可使用模拟器按键、键盘输入可以使用鼠标单击、拖拽屏幕进行操作Android模拟器Android模拟器和真机的不同之处不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼入和呼出不支持USB连接不支持相机、视频捕捉不支持音频输入,但支持输出不支持扩展耳机不能确定连接状态不能确定电池电量水平和交流充电状态不能确定SD卡的插入/弹出不支持蓝牙模拟器在PC机上产生的临时文件需要手工清理Android虚拟机DalvikDalvik和标准Java虚拟机(JVM)首要差别Dalvik基于寄存器,相对于基于数据栈的JVM,能够更快的编译较大的应用程序Dalvik和JVM运行环境的区别Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例每一个Dalvik应用作为一个独立的Linux进程执行,可防止在某一虚拟机崩溃的时候所有应用都被关闭Dalvik提供一个拥有较少限制许可证的平台Android中重要的包Android.app:提供高层的程序模型、提供基本的运行环境Android.content:包含各种的对设备上的数据进行访问和发布的类Android.database:通过内容提供者浏览和操作数据库Android.graphics:底层的图形库,可以将它们直接绘制到屏幕上.Android.location:定位和相关服务的类Android.media:提供一些类管理多种音频、视频的媒体接口A:提供帮助网络访问的类,超过通常的.*接口Android.os:提供了系统服务、消息传输、IPC机制Android.opengl:提供OpenGL的工具Avider:提供类访问Android的内容提供者Android.telephony:提供与拨打电话相关的API交互Android.view:提供基础的用户界面接口框架Android.util:涉及工具性的方法,例如时间日期的操作Android.webkit:默认浏览器操作接口Android.widget:各UI元素(多数可见)在应用程序屏幕中使用Android的文件格式java文件:应用程序源代码Android本身相当一部分都是用Java编写而成Android的应用程序使用Java来开发class文件:Java编译后的目标代码Android使用Dalvik来运行应用程序Android的class文件是编译过程中的中间目标文件,需要链接成dex文件才能在Dalvik上运行dex文件:Android平台上的可执行文件Dalvik虚拟机执行的是dex格式字节码,并非Java字节码在编译Java代码之后,通过Android提供的Dx工具可以将Java字节码转换成dex字节码Dalvik针对手机应用、嵌入式CPU做过优化,可以同时运行多个VM实例而不占用过多系统资源apk文件:Android上的安装文件apk是Android安装包的扩展名,安装包内包含了与该Android应用程序相关的所有文件Android将AndroidManifest.xml文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包,即.apkapk文件的本质是一个压缩包,一个工程只能打进一个.apk包Android应用Android应用Activity:活动Android应用程序中最基本的组件,应用程序中一个Activity通常就是一个单独的屏幕每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应大多数的应用是由多个屏幕显示组成示例: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>显示内容: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模拟器运行显示内容:HelloWorld,everyone!命令行方式首先启动模拟器 emulator-avdSDK_2.1_Update1_API_7然后连接模拟器: telnetlocalhost5554接下来,就可以拨打电话: gsmcall10086或者是发送短信: smssend10086messagefrom10086另:adbkill-server:关掉现有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该文件夹是存放项目的源代码。新建项目时,系统生成了一个HelloWorld.java
文件,它导入了两个类android.app.Activity和android.os.Bundle,HelloWorld类继承自Activity且重写了onCreate方法。@Override:在方法前面加上@Override系统可以帮助检查方法的正确性。例如,publicvoidonCreate(……){……}这种写法是正确的,如果写成publicvoidoncreate(……){……}这样编译器会报错——Themethodoncreate(Bundle)oftypeHelloWorldmustoverrideorimplementasupertypemethod,以确保你正确重写onCreate方法。如果不加@Override,则编译器会认为是新定义了一个方法oncreate,检测不出书写错误。android.app.Activity类:因为几乎所有的Activity都是与用户交互的,所以该类关注创建窗口,可以用方法setContentView(View)将自定义的UI放到Activity里面。有两个方法是几乎所有的Activity子类都实现的: onCreate(Bundle):初始化Activity,用布局资源(layoutresource)调用setContentView(int)方法定义UI(main.xml)。 onPause():处理当离开该Activity时要做的事情,用户做的所有改变应该在这里提交(通常ContentProvider保存数据)。android.os.Bundle类:从字符串值映射各种可打包的(Parcelable)类型Bundle:捆绑
例如该类提供了公有方法:publicbooleancontainKey(Stringkey),如果给定的key包含在Bundle的映射中返回true,否则返回false。Androidproject:gen该文件夹下面有一个项目创建时自动生成并实时更新的R.java文件,这个文件是只读的,不允许修改。R.java文件中定义了一个类R,类中包含很多静态类,且静态类的名字都与res中的一个名字对应,即R类定义了res目录下所有资源的索引。通过R.java程序可以很快地查找到需要的资源,另外通过检查R.java列表,编译器不会将没有被使用到的资源编译进应用程序包中,以减少手机中的空间占用。R:资源索引类Androidproject:Android2.1-update1该文件夹下包含Java归档文件android.jar,包含了构建项目所需的所有的AndroidSDK库和APIs。通过android.jar将应用程序绑定到AndroidSDK和AndroidEmulator,这使得项目可以使用所有Android的库和包,并且可以在适当的环境中调试。例如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文件,还可以存放不同类型的数据,如arrays.xml、colors.xml、dimens.xml、styles.xmlAndroidproject:assets该文件夹包含项目所需要使用到的诸如mp3、视频文件,存放的也是资源文件。与res文件夹存放的资源不同的是,assets内的资源文件不会被R类索引,不能使用R的成员引用方式进行访问。Androidproject:AndroidManifest.xml项目的总配置文件,存储整个项目的配置数据,记录了应用程序中所使用的各种组件,列出了应用程序所提供的功能,指出了应用程序使用到的服务(如电话、互联网、短信、GPS等)应用程序添加新的Activity时,也需在此注册后才能调用AndroidManifest.xml包含如下设置: application、permissions、Activities、Intentfilters等Androidproject:perties由AndroidTools自动生成,不允许修改文件中记录了项目中所需要的环境信息,比如AndroidAPI的最低兼容版本等项目HelloWorld的perties文件代码如下所示: #Projecttarget. target=android-7Androidproject:proguard.cfgproguard是Java类文件的压缩、优化、混淆器,用于删除没有用的类、字段、方法与属性,以使字节码达到最大程度地优化作为配置文件,proguard.cfg是\android-sdk-windows\tools\lib\目录下的同名文件的副本proguard.cfg是在AndroidSDK升级到2.3版后才出现的,同样不需要手工修改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中的呈现方式即为”布局”,布局中需要描述组件的大小、间距、对齐方式等Layout的创建:首先将需要呈现的组件在xml配置文件中进行声明然后在程序中通过setContentView(View)方法将视图呈现在Activity中最后在程序中通过findViewById(Id)方法获得各组件实例UI:Layout的种类LinearLayoutFrameLayoutTableLayoutRelativeLayoutAbsoluteLayoutListLayoutRadioGroupGridView………实例:TextView、Button、ImageView等各个组件按线性布局垂直摆放线性布局LinearLayoutUI:LinearLayout线性布局LinearLayout方向:android:orientation="vertical"android:orientation="horizontal"对齐:android:gravity="top" (bottom/left/right)大小:android: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)坐标开始布局所有组件都钉到屏幕的左上角不能为组件指定位置,所有组件均在(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中事件处理同样包括三个部分:事件源:产生事件的组件、硬件、资源等事件:单击事件、按键事件等事件监听器:Listener,用于监听事件的发生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要有多样化的形状和样式,但又要形成统一的视觉风格,其尺寸和定位也需要统一:红色边框为图标尺寸蓝色边框是图形尺寸,比图标尺寸稍小,图形之外的空间用于显示阴影和特殊效果橙色边框是另外一种图形尺寸。两种类型的图形尺寸可以达到统一的视觉权重UI:Icon的风格符合当下的流行趋势,避免过度使用隐喻高度简化和夸张,小尺寸图标也能易于识别,不宜太复杂尝试抓住程序的主要特征,比如音像作为音乐的icon使用自然的轮廓和形状,看起来几何化和有机化,不失真实感。采用前视角,几乎没有透视,光源在顶部。不光滑但富有质感。UserInterface:用户界面UI布局管理、事件响应机制:Java的UI设计思想布局管理Layout事件响应Listener图标Icon菜单Menu对话Dialog提示Toast风格和主题定制组件WidgetUI:关于MenuAndroid系统提供三种菜单:optionsmenu(选项菜单)通过点击MENU键来显示contextmenu(上下文菜单)在某View上长按2s后显示submenu(子菜单)显示为浮动列表,在以上两种菜单的菜单项被选中时显示出来;前二者都有可以嵌套子菜单,而子菜单本身不能再嵌套Android系统具备对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组;菜单项分组后,可以调用setGroupCheckable、setGroupEnabled、setGroupVisible等方法来统一设置整个菜单项分组的属性,而无须一个一个单独设置UI:optionsmenu主菜单optionsmenu显示在屏幕下方,最多只能显示6个菜单项,称为iconmenu(不支持checkable属性);其余菜单项会以moreiconmenu来调出,称为expandedmenuoptionsmenu通过Activity的onCreateOptionsMenu方法来生成,这个函数只会在menu第一次生成时调用可在menu显示前调用onPrepareOptionsMenu方法来实现对菜单的更改onOptionsItemSelected方法在选中菜单项后被调用,实现菜单项的响应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实现菜单");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在显示前都会调用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来完成对话框的创建,调用showDialog方法传入对话框的id来显示指定对话框关闭对话框可用dismiss方法实现,也可以调用removeDialog方法来彻底释放对话框onDismissListener方法可在关闭对话框时执行一些特定工作实例: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:
当用户执行某一动作后,系统自动显示提示信息,显示一段时间后自动消失,是为“Toast”程序中创建Toast:调用Toast的静态方法makeText()设置现实文本和时长调用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系统映像包含了一些示例widgets,包括指针时钟、音乐播放器和其他工具如Google搜索栏Widget即是可由用户自己编写的功能控件用户在主屏幕(HomeScreen)的空白区域长按,选择菜单的Widgets项,即可选取所需的控件显示在主屏幕上用户可自行设计一个Widget,使得和其它Widget以及主屏幕其它元素保持风格一致UI:Widget设计典型的AndroidWidget主要有三个组成部分:一个限位框,一个框架,还有Widget的图形控件以及其它元素设计周全的Widget会在限位框边缘与框架之间,及框架内边缘与Widget的控件之间都保留一些内填充(内补白)Widget的外观应被设计得与主屏幕的其它Widget相匹配,并以主屏幕的其它元素为依据对齐,也应使用标准的阴影效果更多信息,可参考开发者指南的AppWidgets章节UI:不同方向的Widget5、Activity,Intent,Service,BroadcastReceiver,onandroidActivityIntentServiceBroadcastReceiverActivity:窗口Android应用程序中最基本的组件,应用程序中一个Activity通常就是一个单独的屏幕、窗口每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应大多数的应用是由多个屏幕显示组成在某些情况下当前的屏幕也许需要向上一个屏幕活动提供返回值,比如让用户从手机中挑选一张照片返回通讯录做为电话拨入者的头像Activity的生命周期onCreate()onStart()onResume()onPause()onStop()onRestart()onDestroy()Activity的状态①active:当一个Activity在屏幕的最上层时(Activity栈的最顶端),处在active或者running状态②paused:如果一个Activity失去焦点(focus)但还看得到它的画面,则处在paused状态。此时该Activity本身所有的状态及数据都还是存在的,也跟窗口管理程序windowmanager保持着联系着③stop:如果一个Activity被其它的Activity完全的遮盖住时,处于stop状态,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,画面不再需要更新Activity:状态转换与生命周期Android的进程优先级前台进程(ActiveProcess):前台Activity、包含正在运行的广播接收器、正在运行的服务可视进程(VisibleProcess):包含一个可视化的Activity服务进程(StartedServiceProcess):包含一个被开启的服务(处理服务,不是直接可视,例如媒体播放器,网络上传、下载等)后台进程(BackgroundProcess):包含一个不可视的Activity(随时可以结束该进程来回收内存)空进程(EmptyProcess):没有持有任何应用程序组件高低ActivityIntentServiceBroadcastReceiverIntent:组件之间的使者Intent:不同组件之间通信的“媒介”,用于描述程序想要做什么Intent可以包括:动作Action数据Data,以URI的形式表示分类Category类型Type组件Component扩展信息Extra常用于启动新的Activty、Service或是发起新的Broadcast等用于启动一个新的Activity,实现多个Activity间的切换定义并实例化一个Intent调用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的数据Data设置Intent的动作Action调用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被触发时,系统会在需要的时候启动程序各种应用还可以通过使用Context.broadcastIntent()将自己的IntentReceiver广播给其它应用程序虽然IntentReceiver在指定的事件发生时,会使用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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高铁站内部装饰方案及施工管理
- 中小型企业资金链风险管理方法论分享
- 药品批发行业的数字化营销策略
- 平面设计基础从零开始学汇报制作
- 大数据在企业管理中的应用案例
- 不同地域风格餐饮空间设计解析
- 幼儿爱国课程设计
- 个人品牌形象建立及营销方法
- 幼儿园美语元旦课程设计
- 《摇滚主题电影节研究》
- 鄂尔多斯盆地煤矿分布图2014
- 销售人员心态培训-销售人员心态培训
- 高中物理知识点讲解-高中物理中常用的数学知识
- ACOG指南:妊娠期高血压疾病指南(专家解读)
- 服务外包公司评价表(共1页)
- 高等数学D7_5可降阶高阶微分方程
- 一年级数学月考试卷分析
- 污水管网工程监理实施细则
- 辣椒介绍PPT课件
- 个人不良贷款清收案例3篇
- RCA成果报告书(2021参考模版)10docx
评论
0/150
提交评论