




已阅读5页,还剩201页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能手机应用开发基础,basedonandroid2011.7,内容包括:,1、Android平台概述2、搭建Android开发环境3、第一个Android应用程序4、Android用户界面设计5、Activity、Intent、Service、BroadcastReceiver6、Android中的数据存取7、Android的多媒体应用8、应用实例:a、b、c、d,课程结构,开放手机联盟(OHA)Android平台综述:平台介绍、开发者社区开发环境:构建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和WindRiver,GooglePhone,OHA与Android,OHA是一个软硬件开发者组织,包括Google,NTTDoCoMo,SprintNextel,andHTC目标:加速智能移动设备的发展提供用户更多更好更便宜的服务由OHA开发的Android,是第一个完整的、开放的、免费的智能移动开发平台。,Android,Android软件系列包括操作系统、中间件和一些关键应用基于Linux2.6内核,使用Java开发应用程序AndroidSDK提供多种开发所必要的工具与API,特点1,应用框架可以重复使用,其组件也可以更换Dalvik虚拟机针对移动设备进行了优化优化的图形能力支持2D/3D图形(OpenGLES1.0)集成了基于开源WebKit引掣的浏览器采用SQLite实现结构化数据存储,特点2,多媒体支持多种音频、视频格式GSMTelephony(hardwaredependent)支持蓝牙Bluetooth,3G和WiFi支持照相机、GPS、指南针和加速度仪等传感器硬件丰富的开发环境,包括模拟机、调试工具、内存运行检测,以及为EclipseIDE所写的插件,优势:开放性,源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发出更具差异性的应用开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益之处在于丰富的软件资源开放的平台也会带来更多竞争,如此一来,消费者将可以用更低的价位购得手机,优势:挣脱运营商的束缚,在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制自从iPhone、GPhone上市,用户可以更加方便地连接网络,运营商的制约减少随着2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈,优势:丰富的硬件选择,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容例如:从诺基亚Symbian手机改用苹果iPhone,此时还可将Symbian中优秀的软件带到iPhone上使用,联系人等资料更是可以方便地转移,优势:不受限制的开发商,采用了对有限内存、电池和CPU优化过的Dalvik虚拟机,Android的运行速度比想象的要快很多Android的源代码遵循ApacheV2软件许可,而不是通常的GPLv2许可,更有利于商业开发Android平台提供给第三方开发商一个十分宽泛、自由的环境,催生各种新颖别致的应用软件具有强大的Linux社区的支持,优势:良好的盈利模式,3-7开的盈利模式,使得产业链条的各方:运营商、制造商、独立软件生产商都可以获得不错的利益将移动终端的评价标准从硬件向软件转变,极大的激发了软件开发者的热情,优势:无缝结合的Google应用,Google成为最大的互联网络搜索引擎已经有10多年历史从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带Android平台手机将无缝结合这些优秀的Google服务,Android不足,由于采用了Java作为应用开发语言,目前可用的传统第三方应用还很少Google提供了一套Java核心包(J2SE5,J2SE6)的有限子集,尚不承诺遵守任何Java规范,可能会造成Java阵营的进一步分裂基于QEMU开发的模拟器调试手段不十分丰富,只支持通话、SMS等,速度慢暂不具备PushMail和Office功能,目前主要面向的是普通消费者用户,对商业用户支持尚弱,系统环境,AndroidSDK所支持的操作系统:WindowsXP(32bit)orVista(32/64bit)MacOSX10.5.8orlater(x86only)Linux(testedonLinuxUbuntuDapperDrake),Android的系统架构,LinuxKernel,LinuxKernel,Android基于Linux内核,但不是Linux内核提供系统核心服务,如进程、内存、电源管理,网络连接,驱动与安全等并不包括全部的Linux,LinuxKernel,Linux内核位于硬件和软件堆之间的抽象层核心服务:安全机制、内存管理、进程管理、网络、硬件驱动内核扮演的是硬件层和系统其它层次之间的一个抽象层的概念操作系统的初始化和编程接口和标准Linux系统有所不同,Libraries,Libraries,BionicLibc:Google自行开发,未采用标准glibcFunctionLibrariesNativeServersHardwareAbstractionLibraries,BionicLibc,C/C+库:通过应用程序框架供各种Android组件使用,其功能包括:媒体库:MPEG4H.264MP3JPGPNG.WebKit/LibWebCore:Web浏览引擎SQLite关系数据库引擎2D,3D图形库、引擎,FunctionLibraries,WebKit基于开源WebKit的浏览器支持CSS、Javascript、DOM、Ajax多媒体框架基于PacketVideoOpenCORE平台支持标准音频、视频SQLite轻型数据库,支持多种平台,NativeServers:Surface,为多种应用提供2D、3D表面设计,NativeServers:Audio,音频处理,HardwareAbstractionLibraries,硬件抽象层HALUserspaceC/C+librarylayer硬件接口驱动作用:隔离硬件接口与Android平台逻辑,AndoidRuntime,AndoidRuntime,应用开发语言:JavaDalvik虚拟机指令:DalvikExcutableJava标准库把Java代码编译为Dalvik可执行文件(dex),AndoidRuntime,核心库提供的Java功能、Dalvik虚拟机依赖于Linux内核可同时运行多个Dalvik虚拟机每个Android应用程序在它自己的DalvikVM实例中执行优化的Dalvik可执行文件(.dex)Dx-工具把编译过的Java文件转换为dex文件,DalvikVirtualMachine,AndroidcustomimplementationvirtualmachineProvidesapplicationportabilityandruntimeconsistencyRunsoptimizedfileformat(.dex)andDalvikbytecodeJava.class/.jarfilesconvertedto.dexatbuildtimeDesignedforembeddedenvironmentSupportsmultiplevirtualmachineprocessesperdeviceHighlyCPU-optimizedbytecodeinterpreterEfficientlyUsingruntimememoryCoreLibrariesCoreAPIsforJavalanguageprovideapowerful,yetsimpleandfamiliardevelopmentplatform,DVMvs.JVM,DVMGoogleDalvikexcutablebytecode对便携设备有限的系统资源和供电进行了专门优化JVMSunJavabytecode跨平台,ApplicationsFramework,ApplicationsFramework,Activitymanager管理运行应用程序ContentProvider在各应用之间共享数据NotificationManager显示用户提示和状态栏ViewsSystem可扩展显示,用于构建UI,ApplicationsFramework,核心应用:联系人,邮件,电话,浏览器,日历,地图充分访问所有核心应用的API简化组件的重用用Java编写应用程序,Applications,Applications,JAVA编写的应用程序程序员、软件服务商,开发环境、工具,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),QuickStart,准备安装JDK(version5or6)安装Eclipse(version3.5andhigher)下载安装SDKstarterpackage解压starterpackage,修改系统变量PATH为Eclipse安装ADT插件添加其它SDK组件运行AndroidSDKandAVDManager,选择并在线安装需要的开发包Done!,安装JavaJDK,下载JDK安装配置系统变量:新建JAVA_HOME:C:ProgramFilesJavajdk1.6.0_25新建CLASSPATH:.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar修改PATH:将%JAVA_HOME%bin;添加在原变量值前,安装Eclipse,下载Eclipse解压可选择的Eclipse版本:EclipseIDEforJavaEEDevelopersEclipseIDEforJavaDevelopersEclipseClassic(versions3.5.1andhigher)常用快捷键:ctrl+Shift+Oimportpackage更新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,安装Android,解压后,在Eclipse中InstallNewSoftware,详细步骤请参阅:Android开发环境搭建.doc,Android学习,了解Android、OHA建立开发环境阅读SDK文档:/docs/index.html动手实现Android编程实例背景知识JavaObjectOrientedProgramming设计模式Eclipse应用J2ME、Brew、Symbian(可选),3、第一个Android应用程序,onandroid,Android模拟器,AndroidEmulator可模拟电话本、通话等功能内置的浏览器和GoogleMaps都可以联网可以使用PC键盘输入(不包括小键盘)可使用模拟器按键、键盘输入可以使用鼠标单击、拖拽屏幕进行操作,Android模拟器,Android模拟器和真机的不同之处不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼入和呼出不支持USB连接不支持相机、视频捕捉不支持音频输入,但支持输出不支持扩展耳机不能确定连接状态不能确定电池电量水平和交流充电状态不能确定SD卡的插入/弹出不支持蓝牙模拟器在PC机上产生的临时文件需要手工清理,Android虚拟机Dalvik,Dalvik和标准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!,onandroid,HelloWorld,Eclipse下自动生成newandroidprojectHelloWorld,HelloWorld.java,Java程序,packagetest.helloworld;importandroid.app.Activity;importandroid.os.Bundle;publicclassHelloWorldextendsActivity/*Calledwhentheactivityisfirstcreated.*/OverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);,返回,R.java,Java程序,/*AUTO-GENERATEDFILE.DONOTMODIFY.*/packagetest.helloworld;publicfinalclassRpublicstaticfinalclassattrpublicstaticfinalclassdrawablepublicstaticfinalinticon=0 x7f020000;publicstaticfinalclasslayoutpublicstaticfinalintmain=0 x7f030000;publicstaticfinalclassstringpublicstaticfinalintapp_name=0 x7f040001;publicstaticfinalinthello=0 x7f040000;,返回,main.xml,xml文件,Resources,返回,strings.xml,xml文件,HelloWorld,everyone!HelloWorld,显示内容:HelloWorld,everyone!,AndroidManifest.xml,xml文件,返回,RUN,RUN,模拟器运行,显示内容:HelloWorld,everyone!,命令行方式,首先启动模拟器emulator-avdSDK_2.1_Update1_API_7然后连接模拟器:telnetlocalhost5554接下来,就可以拨打电话:gsmcall10086或者是发送短信:smssend10086messagefrom10086另:adbkill-server:关掉现有adbServeradbdevices:显示运行中的设备,屏幕分辨率,入门级的:QVGA(320 x240)主流的:HVGA(480 x320)主流的:WVGA800(800 x480)moto特有的:WVGA854(854x480)魅族M9:960 x640三星GalaxyTabP1000:1024x600(7寸屏)基准分辨率:VGA(640 x480)HVGA-L或是-P:横屏、竖屏模拟器的默认分辨率依SDK版本而不同,Androidproject的目录结构,文件夹src文件夹gen文件夹Android2.1-update1文件夹assets文件夹resAndroidMpertiesproguard.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.xml,Androidproject: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-7,Androidproject:proguard.cfg,proguard是Java类文件的压缩、优化、混淆器,用于删除没有用的类、字段、方法与属性,以使字节码达到最大程度地优化作为配置文件,proguard.cfg是android-sdk-windowstoolslib目录下的同名文件的副本proguard.cfg是在AndroidSDK升级到2.3版后才出现的,同样不需要手工修改,4、Android用户界面设计,onandroid,UserInterface:用户界面,UI布局管理、事件响应机制:Java的UI设计思想布局管理Layout事件响应Listener图标Icon菜单Menu对话Dialog提示Toast风格和主题定制组件Widget,UserInterface:用户界面,UI布局管理、事件响应机制:Java的UI设计思想布局管理Layout事件响应Listener图标Icon菜单Menu对话Dialog提示Toast风格和主题定制组件Widget,UI:布局管理Layout,所有UI类均源于View、ViewGroup,View的子类称为组件(Widget),ViewGroup的子类称为布局(Layout)ViewGroup通过各种Layout,控制所属View的显示位置,形成图示的组合设计模式(Composite):,UI:布局管理Layout,Layout:组件在Activity中的呈现方式即为”布局”,布局中需要描述组件的大小、间距、对齐方式等Layout的创建:首先将需要呈现的组件在xml配置文件中进行声明然后在程序中通过setContentView(View)方法将视图呈现在Activity中最后在程序中通过findViewById(Id)方法获得各组件实例,UI:Layout的种类,LinearLayoutFrameLayoutTableLayoutRelativeLayoutAbsoluteLayoutListLayoutRadioGroupGridView,实例:,TextView、Button、ImageView等各个组件按线性布局垂直摆放,线性布局LinearLayout,UI:LinearLayout,线性布局LinearLayout方向:android:orientation=verticalandroid:orientation=horizontal对齐:android:gravity=top(bottom/left/right)大小:android:layout_width=wrap_contentandroid:layout_width=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风格和主题定制组件Widget,UI:事件处理机制,延用了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风格和主题定制组件Widget,UI:关于Icon,应用程序需要各种各样的图标:icon文件icons要有多样化的形状和样式,但又要形成统一的视觉风格,其尺寸和定位也需要统一:红色边框为图标尺寸蓝色边框是图形尺寸,比图标尺寸稍小,图形之外的空间用于显示阴影和特殊效果橙色边框是另外一种图形尺寸。两种类型的图形尺寸可以达到统一的视觉权重,UI:Icon的风格,符合当下的流行趋势,避免过度使用隐喻高度简化和夸张,小尺寸图标也能易于识别,不宜太复杂尝试抓住程序的主要特征,比如音像作为音乐的icon使用自然的轮廓和形状,看起来几何化和有机化,不失真实感。采用前视角,几乎没有透视,光源在顶部。不光滑但富有质感。,UserInterface:用户界面,UI布局管理、事件响应机制:Java的UI设计思想布局管理Layout事件响应Listener图标Icon菜单Menu对话Dialog提示Toast风格和主题定制组件Widget,UI:关于Menu,Android系统提供三种菜单: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子菜单,一个浮动菜单列表,通过在选项菜单或上下文菜单选择菜单项显露出来不支持嵌套子菜单,/其他的item定义/其他的item定义,实例:Test_of_Widget,MainActivity.java中指定主菜单xml文件重写onOptionsItemSelected()方法,publicbooleanonCreateOptionsMenu(Menumenu)menuInflater.inflate(R.menu.menu_filesystem,menu);returntrue;,publicbooleanonOptionsItemSelected(MenuItemitem)switch(item.getItemId()caseR.id.about:aboutAlert(使用xml实现菜单);break;caseR.id.exit:exitAlert(确认要退出吗?);break;returntrue;,privatevoidaboutAlert(Stringmsg)privatevoidexitAlert(Stringmsg),resmenumenu_filesystem.xml定义菜单,.,运行结果:,运行结果:,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风格和主题定制组件Widget,UI:关于Dialog,Android中对话框主要有:普通对话框、选项对话框、单选多选对话框、进度对话框、日期对话框、时间对话框等在程序中可以通过方法onCreateDialog来完成对话框的创建,调用showDialog方法传入对话框的id来显示指定对话框关闭对话框可用dismiss方法实现,也可以调用removeDialog方法来彻底释放对话框onDismissListener方法可在关闭对话框时执行一些特定工作,实例:Test_of_Widget,button1.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:Dialog,UI:Dialog,UserInterface:用户界面,UI布局管理、事件响应机制:Java的UI设计思想布局管理Layout事件响应Listener图标Icon菜单Menu对话Dialog提示Toast风格和主题定制组件Widget,UI:关于Toast,Toast:当用户执行某一动作后,系统自动显示提示信息,显示一段时间后自动消失,是为“Toast”程序中创建Toast:调用Toast的静态方法makeText()设置现实文本和时长调用Toast的show()方法显示,实例:Test_of_String,finalintl=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_Toast,UserInterface:用户界面,UI布局管理、事件响应机制:Java的UI设计思想布局管理Layout事件响应Listener图标Icon菜单Menu对话Dialog提示Toast风格和主题定制组件Widget,UI:关于Stylebutton0.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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 协议买卖合同5篇
- 解析卷人教版八年级上册物理声现象《声音的产生与传播》专题测试试卷(附答案详解)
- 山西省经贸考试题库及答案
- 会计人员考试题库及答案
- 难点详解人教版八年级上册物理物态变化《熔化和凝固》专项测评试卷(含答案详解)
- 工程第三类考试题及答案
- 东莞六中考试题库及答案
- 岷县初一月考试卷子及答案
- 计算机专转本考试真题及答案
- 《病区医院感染管理规范》试题及答案
- 2023年招标师考试案例分析真题及答案解析
- JJG 1030-2007超声流量计
- GB/T 8884-2017食用马铃薯淀粉
- 01综合管沟汇报
- 二十五项反措自查评汇总
- 中国Flash市场发展现状讲解
- 《晋祠》 教学课件
- (完整版)英语四线格(A4打印)
- 苏州大学医学部操作技能直接观察评估(DOPS)评分表
- CAPP技术与实施课件
- 微生物学:第五章 微生物的代谢
评论
0/150
提交评论