收藏 分销(赏)

疯狂android资料:第六章android应用的资源.doc

上传人:二*** 文档编号:4479692 上传时间:2024-09-24 格式:DOC 页数:10 大小:792KB 下载积分:5 金币
下载 相关 举报
疯狂android资料:第六章android应用的资源.doc_第1页
第1页 / 共10页
本文档共10页,全文阅读请下载到手机保存,查看更方便
资源描述
2013年1月23日14:50:42 Android应用的源代码大致可分为如下三大类: -》界面布局文件:XML文件,文件中每个标签都对应于相应的View标签 -》Java源文件:应用中的Activity、Service、BroadcaseReceiver、ContentProvider四大组件都是采用Java代码实现的。 -》资源文件:主要以各种XML为主,还可以包括*.png 、*.jpg 、*.gif图片资源 Android应用对字符串常量、数值常量的定义做了进一步的改进:android允许把应用中用到的各种资源:字符串资源、颜色资源、数组资源、菜单资源等都集中放到res目录中定义,应用程序则直接使用这些资源中的定义的值。 Android应用下除了res目录用于存放资源之外,assets目录也用于存放资源。一般来说,assets目录下存放的资源代表应用无法直接访问的原生资源,应用程序需要通过AssetMassager以二进制的形式来读取资源。而res目录下的资源,android SDK会在编译该应用时,自动在R.java文件中为这些资源创建索引,程序可直接通过R资源清单进行访问。 6.1资源的类型及存储方式 Android应用资源可分为两大类: -》无法直接访问是原生资源,保存在asset目录下 -》可通过R资源清单访问的资源,保存在res目录下。 6.1.1资源的类型以及存储方式 Android要求在res目录下用不用的子目录来保存不同的应用资源。 Android不同资源再/res目录下的存储方式: 一旦将应用程序的各种资源分别保存在android应用的/res目录下,接下来既可以在Java程序中使用这些资源,也可以在其他XML资源中使用这些资源。 6.1.2使用资源 在android应用中使用资源科分为在Java代码和XML文件中使用资源,其中Java代码用于android应用定义四大组件,而XML文件中则用于为android应用定义各种资源。 1. 在Java代码中使用资源 由于android SDK会在编译应用时在R类中为/res目录下所有资源创建索引项,因此在Java代码中访问资源主要通过R类来完成。其完整的语法格式为: [<package_name>.]R.<resource_type>.<resource_name> 上面语法格式成分的说明如下: -》<package_name>.:指定R类所在包,实际上就是使用权限定类名。当然,如果再Java程序中导入R类所在包,就可以省略包名。 -》<resource_type>:R类中代表不同资源类型的子类,例如String代表字符串资源 -》<resource_name>:指定资源的名称。该资源名称可能是无后缀的文件名,也可能是XML资源元素中由android:name属性所指定的名称。 2. 在XML代码中使用资源 当定义XML资源文件时,其中的XML源可能需要不同的值,这些值就可以设置为已定义的资源项。在XML代码中使用资源完整语法格式: @[<package_name>:]<resource_type>/<resource_name> 上面语法格式中个成分的说明: -》<package_name>:指定资源所在应用指定包。如果所在引用的资源和当前资源位于同一包下,则可以省略 -》<resource_type>:R类中代表不同资源类型的子类。 -》<resource_name>:指定资源的名称。该资源名称可能是无后缀的文件名,也可能是XML资源元素中由android:name属性所指定的名称。 6.2使用字符串、颜色、尺寸资源 字符串资源、颜色资源、尺寸资源,它们对于的XML文件都将位于/res/values目录下,它们默认的文件名,以及在R类中对于的内部类如下: 6.2.1颜色值的定义 Android中的颜色是通过红(Red)、绿(Green)、蓝(Blue)三原色,以及一个透明度(Alpha)值来表示的,颜色值总是以井号(#)开头,接下来就是Alpha-Red-Green-Blue的形式。其中Alpha值可以省略,如果省略了Alpha值,那么该颜色默认是完全不透明的。 Android颜色值支持常见的四种形式: -》#RGB:分别制定红、绿、蓝三原色的值(只支持0~f这16级颜色)来代表颜色 -》#ARGB:分别制定红、绿、蓝三原色的值(只支持0~f这16级颜色)及透明度(只支持0~f这16级透明度)来代表颜色 -》RRGGBB:分别制定红、绿、蓝三原色的值(只支持00~ff这256级颜色)来代表颜色 -》AARRGGBB:分别制定红、绿、蓝三原色的值(只支持00~ff这256级颜色)及透明度(只支持00~ff这16级透明度)来代表颜色 6.2.2定义字符串、颜色、尺寸资源文件 字符串资源文件位于res/values目录下,字符串资源文件的跟元素是<resource....>,该元素里每个<string.../>子元素定义一个字符串常量,其中<string...../>元素的name属性指定该常量的名称,<string.../>元素开始标签和结束标签之间的内容代表字符串值。 <string name=”hello”>Hello World,ValuesResTest</string> <resources> <string name="app_name">6.2.1</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="title_activity_test6_2_1">Test6_2_1</string> <string name="c1">F00</string> <string name="c2">0F0</string> <string name="c3">00F</string> <string name="c4">0FF</string> <string name="c5">F0F</string> <string name="c6">Ff0</string> <string name="c7">07F</string> <string name="c8">70F</string> <string name="c9">F70</string> </resources> 颜色资源文件位于res/vaues目录下,颜色资源文件的根元素<resurce...> <?xml version="1.0" encoding="utf-8"?> <resources> <color name="c1">#F00</color> <color name="c2">#0F0</color> <color name="c3">#00F</color> <color name="c4">#0FF</color> <color name="c5">#F0F</color> <color name="c6">#FF0</color> <color name="c7">#07F</color> <color name="c8">#70F</color> <color name="c9">#F70</color> </resources> 尺寸资源文件位于res/values目录下,尺寸资源文件的根元素是<resource...> <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="spacing">8dp</dimen> <dimen name="cell_width">60dp</dimen> <dimen name="cell_height">66dp</dimen> <dimen name="title_font_size">18sp</dimen> </resources> 6.2.3使用字符串、颜色、尺寸资源 实例:6.2.1 Android也允许使用资源文件来定义boolean常量,例如在/res/values目录下增加一个booleans.xml文件,该文件的根元素也是<resource.../> <?xml version="1.0" encoding="utf-8"?> <resources> <bool name="is_male">true</bool> <bool name="is_big">false</bool> </resources> 6.3数组(Array)资源 Android同样采用位于/res/values目录下的array.xml文件来定义数组,定义数组时XML资源文件的根元素也是<resource..../>元素,该元素内可包含三种子元素: -》<array.../>子元素:定义普通类型的数组。例如Drawable数组。 -》<string-array.../>子元素:定义字符串数组。 -》<integer-array.../>子元素:定义整数数组。 6.4使用(Drawable)资源 Drawable资源是android应用中使用最广泛的资源,也是android应用中最灵活的资源,它不仅可以直接使用*.png 、*.jpg 、*.gif图片作为资源,也可以使用多种XML文件作为资源。只要一份XML文件可以被系统编译成Drawable子类的对象,那这份XML文件即可作为Drawable资源。 Drawable资源通常保存在/res/drawable目录下。 6.4.1图片资源 图片资源是最简单的Drawable资源,只要把图片放入/res/drawable-xxx目录下,android SDK就会在编译应用自动加载该图片,并在R资源清单类中生成资源的索引。 注意:android不允许图片资源的文件名出现大写字母,且不能以数字开头。否则android SDK无法为该图片在R类中生成资源索引 6.4.2StateListDrawable资源 2StateListDrawable用于组织多个Drawable对象。当使用StateListDrawable作为目标组件的背景、前景图片时,,StateListDrawable对象所显示的Drawable对象会随目标组件状态的改变而自动切换。 定义2StateListDrawable对象是XML文件的根元素为你<selector.../>,该元素可以包含多个<iten.../>元素,该元素可指定如下属性。 -》android:color或android:drawable:指定颜色或Drawable对象 -》android:state_xxx:指定一个特定状态。 StateListDrawable的<item.../>元素所支持的状态有如下; 实例:高亮显示正在输入的文本框(6.4.1)不正常的 6.4.3LayerDrawable资源 与StateListDrawable有点类似,LayerDrawable也可包含一个Drawable数组,因此系统将会按这些Drawable对象的数组顺序来绘制它们,索引最大的Drawable对象将会绘制在最上面。 定义LayerDrawable对象的XmL文件的根元素为<layer-list.../>,该元素可以包含多个<item.../>元素,该元素可指定如下属性: -》android:drawable:指定作为LayerDrawable元素之一的Drawable对象 -》android:id:为该Drawable对象指定一个标识。 -》android:button|top|left|button:它们用于指定一个长度值,用于指定该Drawable对象绘制到目标组件的指定位置。 实例:定制滚动条的外观(6.4.2)不正常 部分跳过 6.5使用原始XML资源 在某些时候,android用于有一些初始化的配置信息、用于相关的数据资源需要保存,一般使用XML文件来保存他们,这种资源就是原始XML资源。 6.5.1定义原始XML资源 原始XMl资源一般保存在/res/xml路径下——当使用创建android用于时。/res目录下并没有包含xml目录,开发者应该自行动手创建xml目录。 接下来android用于对原始XML资源诶有任何特殊的要求,只要他是一份格式良好的XML文档即可。 一旦成功地定义了原始XML资源,接下来在XML文件中可通过如下语法来访问它: -》@[<package_name>]xml.file_name 在Java代码中则按如下语法格式来访问它: -》[<package>.R.xml.<file-name>] 为了在Java程序中获取实际的XmL文档,可以通过如下Resource的两个方法来获取: -》XmlResourceParser getXml(int id):获取XML文档,并使用一个XmlPullParser来解析XML文档,该方法返回一个解析器的对象(XmlResourceParser是XmlPullParser的子类) -》InputStream openRawResource(int id):获取XML文档对应的输入流。 6.5.2使用原始XML文件 实例:6.5.1 6.6使用布局(Layout)资源 Layout资源放在/res/layout目录下,Layout资源文件的根元素通常是各种布局管理器,比如LinearLayout、TableLayout、FrameLayout等,接着在该布局管理器中定义各种View组件即可。 6.7使用菜单(Menu)资源 使用XML定义菜单将会提供更好的解耦 6.7.1定义菜单资源 菜单资源文件通常应该放在/res/menu目录下,菜单资源的根元素通常是<menu.../>元素,<menu.../>元素无需指定任何属性。<menu.../>元素内可包含如下子元素: -》<item../>元素:定义菜单项。 -》<group.../>子元素:将多个<item../>定义的菜单包装成一个菜单项 <group.../>子元素用于控制整组菜单的行为,该元素可指定如下常用属性。 -》checkableBehavior:指定该组菜单的选择行为。可指定为none、all和single三个值。 -》menuCategory:对菜单进行分类,指定菜单的优先级。有效值为container System、secondary和alternative。 -》visible:指定该组菜单是否可见。 -》enable:指定该组菜单是否可用。 <item../>元素用于定义一份菜单项,<item../>元素又可以包含<menu../>元素,位于<item../>元素内部的<menu./>就代表子菜单。 <item../>元素可指定为如下常用属性: -》android:id:为菜单项指定一个唯一标识。 -》android:title:指定菜单项的标题。 -》android:icon:指定菜单项的图标。 -》android:alphabeticShortcut:为菜单项指定字符快捷键。 -》android:numbericShortcut:为菜单项指定数字快捷键。 -》android:checkable:设置该菜单项是否可选。 -》android:chcked:设置该菜单项是否已选中。 -》android:visible:设置该菜单项是否可见。 -》android:enable:设置该菜单项是否可用。 一旦在程序中定义了菜单资源后,接下来还是重写onCreateOptionsMenu(用于创建选项菜单)、onCreateContextMenu(用于创建上下文菜单)方法,在这些方法调用MenuInFlater对象的inflater方法装载指定资源对应的菜单即可 6.7.2使用菜单资源 实例:(6.7.1) 6.8样式(Style)和主题(Theme)资源 样式和主题资源都是用于对android应用进行美化的,只是充分利用android应用的样式和主题资源,开发者可以开发出各种风格的android应用。 6.8.1样式资源 Android的样式资源文件也放在/res/values目录下,样式资源文件的根元素是<resource../>元素,该元素内可包含多个<style.../>子元素,每个<style.../>元素定义一个样式。 <.style.../>元素指定如下两个属性。 -》name:指定样式的名称。 -》parent:指定该样式所继承的父样式。当继承某个父样式时,该样式会获得赴样式中定义的全部样式。当然,当前样式也可以覆盖赴样式中指定的格式。 <.style.../>元素内可以包含多个<item../.>子元素,每个<item../.>子元素定义一个格式项。 实例:6.8.1 6.8.2主题资源 与样式资源非常相似,主题资源的XML文件通常也放在/res/values目录下,主题资源的XML文档同样以<resource.../>元素作为根元素,同样使用<style../>元素来定义主题。 主题与样式的区别在于: -》主题不能作用于单个View组件,主题应该对整个应用中的所以Activity起作用,或对指定的Activity起作用。 -》主题定义的格式应该是改变窗口外观的格式,例如窗口的标题 窗口边框等。 实例:给所有窗口添加边框、背景(6.8.2) 不正常 大部分时候,在AndroidManifest.xml文件中最指定应用、指定Activity应用主题更加简洁。如果想让应用中全部窗口使用该主题,只要为<application.../>元素添加android:theme属性。属性值是一个主题的名字。 6.9属性(Attribute)资源 当在XML布局文件中使用android系统提供的View组件时,开发者可以指定多个属性,这些属性可以很好滴控制View组件的外观行为。如果用户开发的自定义View组件也需要指定属性,就需要属性资源的帮助了。 属性资源文件也放在/res/values目录下,属性资源文件的根元素也是<.resource..../>该元素里包含如下两个子元素。 -》attr子元素:定义一个属性。 -》declare-styleable子元素:定义一个styleable对象,每个styleable对象就是一组attr属性的集合。 实例:(6.9.1)不正常 6.10使用原始资源 除了上面介绍的各种XML文件、图片文件之外,android应用可能还需要用到大量其他类型的资源,比如声音资源等。实际上。声音对于android应用非常重要,选择合适的音效可以让android应用增色不少。 类似声音文件及其他各种类型的文件,只要android没有为之提供专门的支持,这种资源都被称为原始资源。Android的元素资源可以放在如下两个地方。 -》位于/res/raw目录下,android SDK会处理该目录下原始资源,android SDK会在R清单类中为该目录下资生成一个索引项。 -》位于/rassets/目录下,该目录下的资源是更彻底的原始资源。Android应用需要通过AssetManager来管理该目录下的原始资源。 AssetManager是一个专门管理/assets/目录下原始资源的管理器类,AssetManager提供了如下两个常用方法来访问Assets资源。 -》InputStream open(String fileName):根据文件名获取原始资源对应的输入流。 -》AssetFileDescriptor openFd(String fileName):根据文件名来获取原始资源对应的AssetFileDescriptor。AssetFileDescriptor代表了一项原始资源的描述,应用程序可通过AssetFileDescriptor来获取原始资源。 实例:6.10.1 2013年1月24日10:35:06 6.11国际化和资源自适应 6.11.1Java国际化的思路 Java程序的国际化的思路是将程序中标签、提示等信息放在资源文件中,程序需要支持哪个国家、语言环境,就需要提供相应的资源文件。资源文件时key-value对,每个资源文件中的key是不变的,但value则随着不同国家、语言改变。 Java程序的国家化主要通过如下三个雷完成: -》java.util.ResourceBundle:用于加载一个国家、语言资源包 -》java.util.Locale:用于封装一个特定的国家、区域、语言环境 -》java.text.MessageFormat:用于格式化带占位符的字符串 为了实现程序的国际化,必须先提供程序所需要的资源文件。资源文件的内容适合很多key-value对。其中key是程序使用的部分,而value则是程序界面的显示字符串。 资源文件的命名可以有如下三种形式: -》baseName_language_country.properties -》baseName_language.properties -》baseName.properties 其中baseName 是资源文件的基本名,用户可以自由定义。而language 和country都不可以随意变化,必须是Java所支持的语言和国家。 6.11.2Java支持的语言和国家 事实上,Java不可能支持所有的国家和语言,如需要获取Java所支持的语言和国家,可调用Locale类的getAvailableLocale方法获取,该方法返回一个Locale数组,该数组里包含了Java所支持的语言和国家。 实例:获取Java所有的国家和语言 (6.11.1) 6.11.4为android应用提供国际化资源 Android程序的国际化资源更加方便——因为android本身就采用lXML资源文件来来管理所有字符串消息,只要为各消息提供不同语言、国家对应的内容即可。 Android应用使用/res/values目录下的资源文件来保存程序中用到的字符串消息,为了给这些消息提供不同语言、国家的版本,开发者需要为values目录添加几个不同的语言版本,不同values文件的命名方式: Values-语言代码-r国家代码 例如希望下面的应用支持简体中文、美式英语两种环境,则需要再res目录下添加values-zh-rCN、values-en-rUS两个目录。 不同语言的国家化资源文件中所有消息的key是相同的,不同语言、国家环境下,消息资源key对应的value不同。 6.11.5国家化android应用 Android的设计本身就是国家化的,当开发者在XML界面布局文件中、在Java代码中加载字符串资源时,android的国家化机制已经起作用了。 实例:6.11.2
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 初中其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服