Android平台开发简介_第1页
Android平台开发简介_第2页
Android平台开发简介_第3页
Android平台开发简介_第4页
Android平台开发简介_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android平台开发简简介平台介绍及及开发基本本流程2011-4月什么是Android?Android是Google在2007年11月5日推出的开开源手机操操作系统。。目前Android在中国的发发展是非非常常火的,为为了节省研研发费用,,国内很多多的手机厂厂商和移动动运营商纷纷纷加入到到了android阵营,其中中包括中国国移动,中中国联通,中国电信,,华为,联联想等大企企业。在中中国不管是是知名的手手机生产厂厂商还是山山寨手机厂厂商,都已已经开始生生产Android操作系统的的手机。另另外android应用的范围围不仅仅在在手机,还还被应用在在汽车、平平板电脑、、和智能上上网设备上上,听说国国外已经有有了安装有有Android系统,并且且能够上网网的智能电电饭煲,用用户在千里里之外就可可以操作电电饭煲进行行煮饭。由于大家大大多使用的的手机都属属傻瓜手机机,也就是是打打电话话、发发短短信。从今今天开始,,大家就应应该改变这这个观念了了,你们需需要把智能能手机看作作是一台电电脑,它能能完成电脑脑所能完成成的一切。。所以你可可以像在电电脑一样,,在智能手手机上安装装软件,以以满足你工工作和生活活的需要。。如何安装AndroidSDK和Eclipse插件所需开发环环境:JDK5或以上版本本(仅有JRE不够)、Eclipse3.4或以上版本本,推荐使用““伽利略””版。下载用于在在Eclipse开发android应用的ADT插件在企业开发发中,很多多程序员使使用EclipseIDE作为应用的的开发环境境。为了使使得Android应用的创建建,运行和和调试更加加方便快捷捷。Android的开发团队队专门针对对EclipseIDE定制了一个个插件:AndroidDevelopmentTools(ADT)下载地址::/android/ADT-0.9.8.zip安装Eclipse插件(ADT)启动Eclipse,选择Help>InstallNewSoftware,在出现的的对话框里里,点击Add按钮,在对对话框的name一栏输入“ADT””,然后点击Archive...,浏览和选选择已经下下载的ADT插件压缩文件。。点击OK.。返回可用软软件的视图图,你会看看到这个插插件,然后选择DeveloperTools(会选中下面面的“AndroidDeveloperTools””和“AndroidEditors““),点击Next,最后重启启Eclipse。下载安装AndroidSDK:AndroidSDK包含了开发发Android应用所依赖赖的jar文件、运行行环境及相相关工具。。下载地址::/android/android-sdk_r07-windows.zip下载完SDK后,把.zip文件解压到到你电脑上上合适位置置。启动Eclipse,选择window->preferences,在打开的的视图左边边点击android,在右边的的SDKLocation中选择AndroidSDK所在位置。。开发第一个个Android应用打开Eclipse,新建项目目(点击FileNewProject),在项目列列表中展开开Android目录,选择择AndroidProject,如下图::开发第一个个Android应用开发第一个个Android应用点击”finish”即可完成项项目的创建建,创建后后的项目已已经是一个个可运行的的Android应用,我们们可以通过过下面方式式运行此应应用:点击工具栏栏上机器人人形状的虚虚拟设备管管理器(简简称“AVD“),如下::开发第一个个Android应用“尚未注册网网络”错误误信息的解解决办法打开开Android模拟拟器器时时,,出出现现无无信信号号,,拔拔打打电电话话或或发发短短信信时时,,提提示示““尚尚未未注注册册网网络络””错错误误信信息息的的解解决决方方案案如如下下。。场景景一一::你你的的电电脑脑没没有有连连接接上上互互联联网网,,同同时时也也没没有有在在局局域域网网。。解决决办办法法::右右键键点点击击网网上上邻邻居居,选择择"属性性",在网网络络连连接接窗窗口口中中右右键键点点击击"本地地连连接接",选择择"属性性",设置置TCP/IP属性性如如下下:IP地址址:00子网网掩掩码码:默认认网网关关:00首选选DNS服务务器器:00场景景二二::你你的的电电脑脑没没有有连连接接上上互互联联网网,,但但在在局局域域网网。。解决决办办法法::右右键键点点击击网网上上邻邻居居,选择择"属性性",在网网络络连连接接窗窗口口中中右右键键点点击击"本地地连连接接",选择择"属性性",设置置TCP/IP属性性如如下下:IP地址址:设置置成成你你所所在在局局域域网网的的IP,如如::00子网网掩掩码码:设置置成成你你所所在在局局域域网网的的掩掩码码,,如如::默认认网网关关:设置置成成你你所所在在局局域域网网的的网网关关,,一一般般网网关关的的IP格式式为为::*.*.*.1,如如::首选选DNS服务务器器:设置置成成你你所所在在局局域域网网的的路路由由器器IP,一一般般路路由由器器的的IP格式式为为::*.*.*.1,如如::最后后一一种种解解决决方方案案是是::让让你你的的电电脑脑连连接接上上互互联联网网。。开发发第第一一个个Android应用用在项项目目上上右右键键点点击击runasAndroidapplication,如如下下图图:Android应用用程程序序架架构构src/java原代代码码存存放放目目录录gen/自动动生生成成目目录录gen目录录中中存存放放所所有有由由Android开发发工工具具自自动动生生成成的的文文件件。。目目录录中中最最重重要要的的就就是是R.java文件件。。这这个个文文件件由由Android开发发工工具具自自动动产产生生的的。。Android开发发工工具具会会自自动动根根据据你你放放入入res目录录的的xml界面面文文件件、、图图标标与与常常量量,,同同步步更更新新修修改改R.java文件件。。正正因因为为R.java文件件是是由由开开发发工工具具自自动动生生成成的的,,所所以以我我们们应应避避免免手手工工修修改改R.java。R.java在应应用用中中起起到到了了字字典典的的作作用用,,它它包包含含了了界界面面、、图图标标、、常常量量等等各各种种资资源源的的id,通过R.java,应用可以很很方便地找到到对应资源。。另外编绎器器也会检查R.java列表中的资源源是否被使用用到,没有被被使用到的资资源不会编绎绎进软件中,,这样可以减减少应用在手手机占用的空空间。res/资源(Resource)目录在这个目录中中我们可以存存放应用使用用到的各种资资源,如xml界面文件,图图片或数据。。assets资源目录Android除了提供/res目录存放资源源文件外,在在/assets目录也可以存存放资源文件件,而且/assets目录下的资源源文件不会在在R.java自动生成ID,所以读取/assets目录下的文件件必须指定文文件的路径,,如:file:///android_asset/xxx.3gpAndroidManifest.xml项目清单文件件这个文件列出出了应用程序序所提供的功功能,以后你你开发好的各各种组件需要要在该文件中中进行配置,,如果应用使使用到了系统统内置的应用用(如电话服务、、互联网服务务、短信服务务、GPS服务等等),你还需在该该文件中声明明使用权限。。perties项目环境信息息,一般是不需需要修改此文文件Android中的显示单位位px(pixels)像素一般HVGA代表320x480像素,这个用用的比较多。。dip或dp(deviceindependentpixels)设备独立像素素这个和设备硬硬件有关,一一般为了支持持WVGA、HVGA和QVGA推荐使用这个个,不依赖像像素。sp(scaledpixels—bestfortextsize)比例像素主要处理字体体的大小,可可以根据系统统的字体自适适应。除了上面三个个显示单位,,下面还有几几个不太常用用:in(inches)英寸mm(millimeters)毫米pt(points)点,1/72英寸为了适适应不不同分分辨率率,不不同的的像素素密度度,推推荐使使用dip,文字字使用用sp。Android开发平平台是是开放放的平平台,,而位位于四四层框框架顶顶端的的应用用开发发,必必然涉涉及到到Android组件。。本文文将为为大家家详细细介绍绍Android组件。。组件((Component),在在谈及及所谓谓架构构和重重用的的时候候,是是一个个重要要的事事情。。很多多时候候都会会说基基于组组件的的软件件架构构,指指的是是期望望把程程序做做乐高高似的的,有有一堆堆接口口标准准封装装完整整的组组件放放在哪哪里,,想用用的时时候取取上几几个一一搭配配,整整个程程序就就构建建完成成了。。在开篇篇的时时候就就在说说,Android是一个个为组组件化化而搭搭建的的平台台,它它引入入所谓谓Mash-Up的概念念,这这使得得你在在应用用的最最上层层,想想做的的不组组件化化都是是很困困难的的一件件事,,具体体说来来,Android有四大大组件件:Activity、Service、BroadcastReceiver、ContentProvider。Android四大组组建Activity是为用用户操操作而而展示示的可可视化化用户户界面面。比比如说说,一一个activity可以展展示一一个菜菜单项项列表表供用用户选选择,,或者者显示示一些些包含含说明明的照照片。。一个个短消消息应应用程程序可可以包包括一一个用用于显显示做做为发发送对对象的的联系系人的的列表表的activity,一个个给选选定的的联系系人写写短信信的activity以及翻翻阅以以前的的短信信和改改变设设置的的activity。尽管管它们们一起起组成成了一一个内内聚的的用户户界面面,但但其中中每个个activity都与其其它的的保持持独立立。每每个都都是以以Activity类为基基类的的子类类实现现。一个应应用程程序可可以只只有一一个activity,或者者,如如刚才才提到到的短短信应应用程程序那那样,,包含含很多多个。。每个个activity的作用用,以以及其其数目目,自自然取取决于于应用用程序序及其其设计计。一一般情情况下下,总总有一一个应应用程程序被被标记记为用用户在在应用用程序序启动动的时时候第第一个个看到到的。。从一一个activity转向另一个个的方式是是靠当前的的activity启动下一个个。每个activity都被给予一一个默认的的窗口以进进行绘制。。一般情况况下,这个个窗口是满满屏的,但但它也可以以是一个小小的位于其其它窗口之之上的浮动动窗口。一一个activity也可以使用用超过一个个的窗口───比如,,在activity运行过程中中弹出的一一个供用户户反应的小小对话框,,或是当用用户选择了了屏幕上特特定项目后后显示的必必要信息。。窗口显示的的可视内容容是由一系系列视图构构成的,这这些视图均均继承自View基类。每个个视图均控控制着窗口口中一块特特定的矩形形空间。父父级视图包包含并组织织它子视图图的布局。。叶节点视视图(位于于视图层次次最底端))在它们控控制的矩形形中进行绘绘制,并对对用户对其其直接操作作做出响应应。所以,,视图是activity与用户进行行交互的界界面。比如如说,视图图可以显示示一个小图图片,并在在用户指点点它的时候候产生动作作。Android有很多既定定的视图供供用户直接接使用,包包括按钮、、文本域、、卷轴、菜菜单项、复复选框等等等。Activity活动服务没有可可视化的用用户界面,,而是在一一段时间内内在后台运运行。比如如说,一个个服务可以以在用户做做其它事情情的时候在在后台播放放背景音乐乐、从网络络上获取一一些数据或或者计算一一些东西并并提供给需需要这个运运算结果的的activity使用。每个个服务都继继承自Service基类。一个媒体播播放器播放放播放列表表中的曲目目是一个不不错的例子子。播放器器应用程序序可能有一一个或多个个activity来给用户选选择歌曲并并进行播放放。然而,,音乐播放放这个任务务本身不应应该为任何何activity所处理,因因为用户期期望在他们们离开播放放器应用程程序而开始始做别的事事情时,音音乐仍在继继续播放。。为达到这这个目的,,媒体播放放器activity应该启用一一个运行于于后台的服服务。而系系统将在这这个activity不再显示于于屏幕之后后,仍维持持音乐播放放服务的运运行。你可以连接接至(绑定定)一个正正在运行的的服务(如如果服务没没有运行,,则启动之之)。连接接之后,你你可以通过过那个服务务暴露出来来的接口与与服务进行行通讯。对对于音乐服服务来说,,这个接口口可以允许许用户暂停停、回退、、停止以及及重新开始始播放。如同activity和其它组件件一样,服服务运行于于应用程序序进程的主主线程内。。所以它不不会对其它它组件或用用户界面有有任何干扰扰,它们一一般会派生生一个新线线程来进行行一些耗时时任务(比比如音乐回回放)。Service服务和接收收器广播接收器器是一个专专注于接收收广播通知知信息,并并做出对应应处理的组组件。很多多广播是源源自于系统统代码的───比如,,通知时区区改变、电电池电量低低、拍摄了了一张照片片或者用户户改变了语语言选项。。应用程序序也可以进进行广播───比如说说,通知其其它应用程程序一些数数据下载完完成并处于于可用状态态。应用程序可可以拥有任任意数量的的广播接收收器以对所所有它感兴兴趣的通知知信息予以以响应。所所有的接收收器均继承承自BroadcastReceiver基类。广广播接收器器没有用户户界面。然然而,它们们可以启动动一个activity来响应它们们收到的信信息,或者者用NotificationManager来通知用户户。通知可可以用很多多种方式来来吸引用户户的注意力力──闪动动背灯、震震动、播放放声音等等等。一般来来说是在状状态栏上放放一个持久久的图标,,用户可以以打开它并并获取消息息。BroadcastReceiver接收器内容提供者将将一些特定的的应用程序数数据供给其它它应用程序使使用。数据可可以存储于文文件系统、SQLite数据库或其它它方式。内容容提供者继承承于ContentProvider基类,为其它它应用程序取取用和存储它它管理的数据据实现了一套套标准方法。。然而,应用用程序并不直直接调用这些些方法,而是是使用一个ContentResolver对象,调用它它的方法作为为替代。ContentResolver可以与任意内内容提供者进进行会话,与与其合作来对对所有相关交交互通讯进行行管理。参阅独立的内内容提供者章章节获得更多多关于使用内内容提供者的的内容。每当出现一个个需要被特定定组件处理的的请求时,Android会确保那个组组件的应用程程序进程处于于运行状态,,或在必要的的时候启动它它。并确保那那个相应组件件的实例的存存在,必要时时会创建那个个实例。ContentProvider当接收到ContentResolver发出的请求后后,内容提供供者被激活。。而其它三种种组件──activity、服务和广播播接收器被一一种叫做intent的异步消息所所激活。intent是一个保存着着消息内容的的Intent对象。对于activity和服务来说,,它指明了请请求的操作名名称以及作为为操作对象的的数据的URI和其它一些信信息。比如说说,它可以承承载对一个activity的请求,让它它为用户显示示一张图片,,或者让用户户编辑一些文文本。而对于于广播接收器器而言,Intent对象指明了声声明的行为。。比如,它可可以对所有感感兴趣的对象象声明照相按按钮被按下。。对于每种组件件来说,激活活的方法是不不同的:通过传递一个个Intent对象至Context.startActivity()或Activity.startActivityForResult()以载载入入((或或指指定定新新工工作作给给))一一个个activity。相相应应的的activity可以以通通过过调调

组件件的的连连接接者者--Intent通过传传递一一个Intent对象至至Context.startService()将启动动一个个服务务(或或给予予正在在运行行的服服务以以一个个新的的指令令)。。Android调用服服务的的onStart()方法并并将Intent对象传传递给给它。。与与此类类似,,一个个Intent可以被被调用用组件件传递递给Context.bindService()以获取取一个个正在在运行行的目目标服服务的的连接接。这这个服服务会会经由由onBind()方法的的调用用获取取这个个Intent对象((如果果服务务尚未未启动动,bindService()会先启启动它它)。。比如如说,,一个个activity可以连连接至至前述述的音音乐回回放服服务,,并提提供给给用户户一个个可操操作的的(用用户界界面))以对对回放放进行行控制制。这这个activity可以调调用bindService()来建立立连接接,然然后调调用服服务中中定义义的对对象来来影响响回放放。应用程程序可可以Manifest文件当Android启动一一个应应用程程序组组件之之前,,它必必须知知道那那个组组件是是存在在的。。所以以,应应用程程序会会在一一个manifest文件中中声明明它的的组件件,这这个文文件会会被打打包到到Android包中。。这个个.apk文件还还将涵涵括应应用程程序的的代码码、文文件以以及其其它资资源。。这个manifest文件以以XML作为结结构格格式,,而且且对于于所有有应用用程序序,都都叫做做AndroidManifest.xml。为声声明一一个应应用程程序组组件,,它还还会做做很多多额外外工作作,比比如指指明应应用程程序所所需链链接到到的库库的名名称((除了了默认认的Android库之外外)以以及声声明应应用程程序期期望获获得的的各种种权限限。但manifest文件件的主主要功功能仍仍然是是向Android声明明应用用程序序的组组件。。举例例说明明,一一个activity可可以如如下声声明::<activity>元素的的name属性性指定定了实实现了了这个个activity的Activity的子类类。icon和和label属属性指指向了了包含含展示示给用用户的的此activity的的图标标和标标签的的资源源文件件。其它组组件也也以类类似的的方法法声明明───<service>元素用用于声声明服服务,,<receiver>元素用用于声声明广广播接接收器器,而而<provider>元素用用于声声明内内容提提供者者。manifest文件中中未进进行声声明的的activity、服务务以及及内容容提供供者将将不为为系统统所见见,从从而也也就不不会被被运行行。然然而,,广播播接收收器既既可以以在manifest文件中中声明明,也也可以以在代代码中中进行行动态态的创创建,,并以以调用用Context.registerReceiver()的方式式注册册至系系统。。如前所所述,,一个个activity可以启启动另另外一一个,,甚至至包括括与它它不处处于同同一应应用程程序之之中的的。举举个例例子说说,假假设你你想让让用户户看到到某个个地方方的街街道地地图。。而已已经存存在一一个具具有此此功能能的activity了,那那么你你的activity所需要要做的的工作作就是是把请请求信信息放放到一一个Intent对象里里面,,并把把它传传递给给startActivity()。于是是地图图浏览览器就就会显显示那那个地地图。。而当当用户户按下下BACK键的时时候,,你的的activity又会再再一次次的显显示在在屏幕幕上。。对于用用户来来说,,这看看起来来就像像是地地图浏浏览器器是你你activity所在的的应用用程序序中的的一个个组成成部分分,其其实它它是在在另外外一个个应用用程序序中定定义,,并运运行在在那个个应用用程序序的进进程之之中的的。Android将这这两两个个activity放在在同同一一个个任任务务中中来来维维持持一一个个完完整整的的用用户户体体验验。。简简单单的的说说,,任任务务就就是是用用户户所所体体验验到到的的““应应用用程程序序””。。它它是是安安排排在在一一个个堆堆栈栈中中的的一一组组相相关关的的activity。堆堆栈栈中中的的根根activity就是是启启动动了了这这整整个个任任务务的的那那个个────一一般般情情况况下下,,它它就就是是用用户户在在应应用用程程序序加加载载器器中中所所选选择择的的。。而而堆堆栈栈最最上上方方的的activity则是是当当前前运运行行的的────用用户户直直接接对对其其进进行行操操作作的的。。当当一一个个activity启动动另另外外一一个个的的时时候候,,新新的的activity就被被压压入入堆堆栈栈,,并并成成为为当当前前运运行行的的activity。而而前前一一个个activity仍保保持持在在堆堆栈栈之之中中。。当当用用户户按按下下BACK键的的时时候候,,当当前前activity出栈栈,,而而前前一一个个恢恢复复为为当当前前运运行行的的activity。Activity和任务Activity生命周期期用户界面面UserInterface在一个Android应用中,,用户界界面是由由View和ViewGroup对象构建建的。View与ViewGroup都有很多多种类,,而它们们都是View类的子类类。ViewView对象是Android平台中用用户界面面体现的的基础单单位。View类是它称称为“widgets(工具))”的子子类的基基础,它它们提供供了诸如如文本输输入框和和按钮之之类的UI对象的完完整实现现。ViewGroup类同样为为其被称称为“Layouts(布局))”的子子类奠定定了基础础,它们们提供了了象流式式布局、、表格布布局以及及相对布布局之类类的布局局架构。。View对象是一一个数据据体,它它的属性性存储了了用于屏屏幕上一一块矩形形区域的的布局参参数及内内容。并并负责这这块它所所辖的这这个矩形形区域之之中所有有测量、、布局、、焦点转转换、卷卷动以及及按键/触摸手势势的处理理。作为为一个用用户界面面对象,,View同时也担担任着用用户交互互关键点点以及交交互事件件接受者者的角色色。布局Layout定义并展现你你的视图层次次的最常用的的方法是使用用XML布局文件。如如同HTML一样,XML为布局提供了了一种可读的的结构。XML中的每个元素素都是View或ViewGroup对象(抑或它它们的子类))。View对象是树的叶叶节点,而ViewGroup对象是树的分分支(参阅楼楼上的视图层层次图)。XML元素的名称与与它体现的Java类相对应。所所以一个<TextView>元素将在你的的UI中生成一个TextView,而<LinearLayout>则创建一个LinearLayout视图组。当你你载入一个布布局资源时,,Android系统会根据你你布局中的元元素初始化这这些运行时对对象。举例来说,一一个包含文本本视图和一个个按钮的简单单垂直布局如如下:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello,IamaTextView"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello,IamaButton"/></LinearLayout>请注意:LinearLayout元素包含了TextView和Button对象。你可以以在其中另外外安置一个LinearLayout(或其它类型型的视图组)),以延展这这个视图层次次,构建更复复杂的布局。。用户界面事件件UIEvents当你在用户界界面中加入了了一些视图和和工具之后,,你可能想要要知道如何让让它们与用户户交互,进而而实现你的动动作。如欲获获得用户界面面事件通知,,你需要做以以下两件事情情之一:•定义一个事件件侦听器并将将其注册至视视图。通常情情况下,这是是你侦听事件件的主要方式式。View类包含了一大大堆命名类似似On<什么什么>Listener的接口,每个个都带有一个个叫做On<什么什么>()的回调方法。。比如:View.OnClickListener(用以处理视视图中的点击击),View.OnTouchListener(用以处理视视图中的触屏屏事件),以以及View.OnKeyListener(用以处理理视图中的的设备按键键事件)。。所以,如如果你希望望你的视图图在它被””点击”((比如选择择了一个按按钮)的时时候获得通通知,你就就要实现OnClickListener,定义它的的onClick()回调方法((在其中进进行相应处处理),并并将它用setOnClickListener()方法注册到到视图上。。•为视图覆写写一个现有有的回调方方法。这种种方法主要要用于你自自己实现了了一个View类,并想侦侦听其上发发生的特定定事件。比比如说当屏屏幕被触摸摸(onTouchEvent()),当轨迹迹球发生了了移动(onTrackballEvent())或者是设设备上的按按键被按下下(onKeyDown())。这种方方式允许你你为自己定定制的视图图中发生的的每个事件件定义默认认的行为,,并决定是是否需要将将事件传递递给其它的的子视图。。再说一次次,这些是是View类相关的回回调方法,,所以你只只能在你构构建自定义义组件时定定义它们。。如何在视图图中处理用用户交互请请参见处理理用户界面面事件文档档。资源和资产产ResourcesandAssets资源是Android应用程序不不可或缺的的部分。总总体而言,,资源是你你想包含和和引入到应应用程序里里面的一些些外部元素素,比如图图片、音频频、视频、、文本字符符串、布局局、主题等等。每个Android应用程序包包含一个资资源目录((res/)和资产目目录(assets/),资产不不经常被使使用,因为为它们的应应用程序很很少。你仅仅在需要读读取原始字字节流时才才需要保存存数据为资资产。资源源和资产目目录均驻留留在Android项目树的顶顶端,和源源代码目录录(src/)处在同一一级上。资源和资产产从表面上上看没多大大区别,不不过总体上上,在存储储外部内容容时资源用用得更多。。真正的区区别在于任任何放置在在资源目录录里的内容容可以通过过您的应用用程序的R类访问,这这是被Android编译过的。。而任何存存放在资产产目录里的的内容会保保持它的原原始文件格格式,为了了读取它,,你必须使使用AssetManager来以字节流流的方式读读取文件。。所以保持持文件和数数据在资源源中(res/)中会更方方便访问。。目录Directory资源类型ResourceTypesres/anim/ XML文件,它们们被编译进进逐帧动画画(framebyframeanimation)或补间动动画(tweenedanimation)对象res/drawable/ .png、.9.png、.jpg文件,它们们被编译进进以下的Drawable资源子类型型中:要获得这种种类型的一一个资源,,可以使用用Resource.getDrawable(id)位图文件9-patches(可变尺寸寸的位图))为了获取资资源类型,,使用mContext.getResources().getDrawable(R.drawable.imageId)注意:放在在这里的图图像资源可可能会被aapt工具自动地地进行无损损压缩优化化。比如,,一个真彩彩色但并不不需要256色的PNG可能会被转转换为一个个带调色板板的8位PNG。这使得同同等质量的的图片占用用更少的资资源。所以以我们得意意识到这些些放在该目目录下的二二进制图像像在生成时时可能会发发生变化。。如果你想想读取一个个图像位流流并转换成成一个位图图(bitmap),请把图像像文件放在在res/raw/目录下,这这样可以避避免被自动动优化。res/layout/被编译为屏屏幕布局((或屏幕的的一部分))的XML文件。参见见布局声明明(DeclaringLayout)res/values/可以被编译译成很多种种类型的资资源的XML文件。注意:不像其他的的res/文件夹,它它可以保存存任意数量量的文件,,这些文件件保存了要要创建资源源的描述,,而不是资资源本身。。XML元素类型控控制这些资资源应该放放在R类的什么地地方。尽管这个文文件夹里的的文件可以以任意命名名,不过下下面使一些些比较典型型的文件((文件命名名的惯例是是将元素类类型包含在在该名称之之中):array.xml定义数据colors.xml定义colordrawable和颜色的字字符串值((colorstringvalues)。使用Resource.getDrawable()和Resources.getColor()分别获得这这些资源。。dimens.xml定义尺寸值值(dimensionvalue)。使用Resources.getDimension()获得这些资资源。strings.xml定义字符串串(string)值(使用用Resources.getString()或者Resources.getText()获取这些资资源。getText()会保留在UI字符串上应应用的丰富富的文本样样式)。• styles.xml定义样式((style)对象。res/xml/任意的XML文件,在运运行时可以以通过调用用Resources.getXML()读取。res/raw/直接复制到到设备中的的任意文件件。它们无无需编译,,添加到你你的应用程程序编译产产生的压缩缩文件中。。要使用这这些资源,,可以调用用Resources.openRawResource(),参数是资资源的ID,即R.raw.somefilename。数据存储与与访问很多时候我我们的软件件需要对处处理后的数数据进行存存储或再次次访问。Android为数据存储储提供了多多种方式,,分别有如如下几种::文件SharedPreferences(参数)SQLite数据库内容提供者者(Contentprovider)网络使用文件进进行数据存存储首先给大家家介绍使用用文件如何何对数据进进行存储,,Activity提供了openFileOutput()方法可以用用于把数据据输出到文文件中,具具体的实现现过程与在在J2SE环境中保保存数据据到文件件中是一一样的。。publicclassFileActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){...FileOutputStreamoutStream=this.openFileOutput("itcast.txt",Context.MODE_PRIVATE);outStream.write(“ggggg".getBytes());outStream.close();}}openFileOutput()方法的第第一参数数用于指指定文件件名称,,不能包包含路径径分隔符符“/”,如果文文件不存存在,Android会自动创创建它。。创建的的文件保保存在/data/data/<packagename>/files目录,如如:/data/data/cn.itcast.action/files/itcast.txt,通过点点击Eclipse菜单“Window””-“ShowView””-“Other”,在对话话窗口中中展开android文件夹,,选择下下面的FileExplorer视图,然然后在FileExplorer视图中展展开/data/data/<packagename>/files目录就可可以看到到该文件件。openFileOutput()方法的第第二参数数用于指指定操作作模式,,有四种种模式,,分别为为:Context.MODE_PRIVATE=0Context.MODE_APPEND=32768Context.MODE_WORLD_READABLE=1Context.MODE_WORLD_WRITEABLE=2使用文件件进行数数据存储储Context.MODE_PRIVATE:为默认认操作模模式,代代表该文文件是私私有数据据,只能能被应用用本身访访问,在在该模式式下,写写入的内内容会覆覆盖原文文件的内内容,如如果想把把新写入入的内容容追加到到原文件件中。可可以使用用Context.MODE_APPENDContext.MODE_APPEND:模式会会检查文文件是否否存在,,存在就就往文件件追加内内容,否否则就创创建新文文件。Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制制其他应应用是否否有权限限读写该该文件。。MODE_WORLD_READABLE:表示当当前文件件可以被被其他应应用读取取;MODE_WORLD_WRITEABLE:表示当当前文件件可以被被其他应应用写入入。如果希望望文件被被其他应应用读和和写,可可以传入入:openFileOutput("itcast.txt",Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);android有一套自自己的安安全模型型,当应应用程序序(.apk)在安装时时系统就就会分配配给他一一个userid,当该应应用要去去访问其其他资源源比如文文件的时时候,就就需要userid匹配。默默认情况况下,任任何应用用创建的的文件,,sharedpreferences,数据库库都应该该是私有有的(位位于/data/data/<packagename>/files),其其他程程序无无法访访问。。除非非在创创建时时指定定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有有这样样其他他程序序才能能正确确访问问。使用SharedPreferences进行数数据存存储很多时时候我我们开开发的的软件件需要要向用用户提提供软软件参参数设设置功功能,,例如如我们们常用用的QQ,用户户可以以设置置是否否允许许陌生生人添添加自自己为为好友友。对对于软软件配配置参参数的的保存存,如如果是是window软件通通常我我们会会采用用ini文件进进行保保存,,如果果是j2se应用,,我们们会采采用properties属性文文件或或者xml进行保保存。。如果果是Android应用,,我们们最适适合采采用什什么方方式保保存软软件配配置参参数呢呢?Android平台给给我们们提供供了一一个SharedPreferences类,它它是一一个轻轻量级级的存存储类类,特特别适适合用用于保保存软软件配配置参参数。。使用用SharedPreferences保存数数据,,其背背后是是用xml文件存存放数数据,,文件件存放放在/data/data/<packagename>/shared_prefs目录下下:SharedPreferencessharedPreferences=getSharedPreferences("itcast",Context.MODE_PRIVATE);Editoreditor=sharedPreferences.edit();//获取编编辑器器editor.putString("name","传智播播客");editor.putInt("age",4);mit();//提交修修改生成的的itcast.xml文件内内容如如下::<?xmlversion='1.0'encoding='utf-8'standalone='yes'?><map><stringname="name">传智播播客</string><intname="age"value="4"/></map>因为SharedPreferences背后是是使用用xml文件保保存数数据,,getSharedPreferences(name,mode)方法的的第一一个参参数用用于指指定该该文件件的名名称,,名称称不用用带后后缀,,后缀缀会由由Android自动加加上。。方法法的第第二个个参数数指定定文件件的操操作模模式,,共有有四种种操作作模式式,这这四种种模式式前面面介绍绍使用用文件件方式式保存存数据据时已已经讲讲解过过。如如果希希望SharedPreferences背后使使用的的xml文件能能被其其他应应用读读和写写,可可以指指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE权限。。另外Activity还提供供了另另一个个getPreferences(mode)方法操操作SharedPreferences,这个个方法法默认认使用用当前前类不不带包包名的的类名名作为为文件件的名名称。。访问SharedPreferences中的数数据访问SharedPreferences中的数据代代码如下::SharedPreferencessharedPreferences=getSharedPreferences("itcast",Context.MODE_PRIVATE);//getString()第二个参数数为缺省值值,如果preference中不存在该该key,将返回缺缺省值Stringname=sharedPreferences.getString("name","");intage=sharedPreferences.getInt("age",1);如果访问其其他应用中中的Preference,前提条件件是:该preference创建时指定定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE权限。如::有个<packagename>为cn.itcast.action的应用使用用下面语句句创建了preference。getSharedPreferences("itcast",Context.MODE_WORLD_READABLE);其他应用要要访问上面面应用的preference,首先需要创创建上面应应用的Context,然后通过过Context访问preference,访问preference时会在应用用所在包下下的shared_prefs目录找到preference:ContextotherAppsContext=createPackageContext("cn.itcast.action",Context.CONTEXT_IGNORE_SECURITY);SharedPreferencessharedPreferences=otherAppsContext.getSharedPreferences("itcast",Context.MODE_WORLD_READABLE);Stringname=sharedPreferences.getString("name","");intage=sharedPreferences.getInt("age",0);如果不通过过创建Context访问其他应应用的preference,也可以以以读取xml文件方式直直接访问其其他应用preference对应的xml文件,如::FilexmlFile=newFile(““/data/data/<packagename>/shared_prefs/itcast.xml”);//<packagename>应替换成应应用的包名名使用嵌入式式关系型SQLite数据库存储储数据除了可以使使用文件或或SharedPreferences存储数据,,还可以选选择使用SQLite数据库存储储数据。在Android平台上,集集成了一个个嵌入式关关系型数据据库—SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字字)、TEXT(字符串文本本)和BLOB(二进制对象象)数据类型,,虽然它支支持的类型型只有五种种,但实际际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型型,只不过过在运算或或保存时会会转成对应应的五种数数据类型。。SQLite最大的特点点是你可以以把各种类类型的数据据保存到任任何字段中中,而不用用关心字段段声明的数数据类型是是什么。例例如:可以以在Integer类型的字段段中存放字字符串,或或者在布尔尔型字段中中存放浮点点数,或者者在字符型型字段中存存放日期型型值。但但有一种情情况例外::定义为INTEGERPRIMARYKEY的字段只能能存储64位整数,当当向这种种字段保存存除整数以以外的数据据时,将会会产生错误误。另外外,SQLite在解析CREATETABLE语句时,会会忽略CREATETABLE语句中跟在在字段名后后面的数据据类型信息息,如下面面语句会忽忽略name字段的类型型信息:CREATETABLEperson(personidintegerprimarykeyautoincrement,namevarchar(20))SQLite可以解析大大部分标准准SQL语句,如::查询语句::select*from表名where条件子句groupby分组字句having...orderby排序子句如:select*frompersonselect*frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount()>1分页SQL与mysql类似,下面面SQL语句获取5条记录,跳跳过前面*3条记录select*fromAccountlimit5offse

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论