Android资源resource学习小结剖析_第1页
Android资源resource学习小结剖析_第2页
Android资源resource学习小结剖析_第3页
Android资源resource学习小结剖析_第4页
Android资源resource学习小结剖析_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、详见:运用 Android SDK 进行 UI 开发时,虽然也可以使用纯代码来完成,但是那 种方法对我这种刚学习 Android 对 API 还不懂的人来说,能进行类似 VB 、MFC 一样图形化开发自然是最合适不过的。幸好 Android 也提供了这种方式,在 Android 工程文件中专门有个 res 目录用于存放资源,该目录下的资源可以进行 可视化的编辑,编写好的资源通过 AAPT (Android AssetPackaging Too)l 工具自 动生成 gen目录下的 R.java 资源索引文件,之后在 Java代码和 XML 资源文件中 就可以利用索引来调用资源了。Android

2、提供了如此便利的资源架构,要想使用它,还是要对他有深入的了 解才可以, 以下就这阵子对 Android 资源的学习进行小结来回顾和整理几个问题Android 资源目录结构问题?Android 资源支持哪些类型资源,他们具体的语法和使用规则?Android 资源目录结构Android 资源除了 assets目录是与 res同级外, 其它资源均被放在 res/目录下 面,该目录下面的资源文件夹并不是随意命名的, 需要遵循严格的规范, 否则编 译生成 R.java过程中会报类似“ invalidresource directory name *”的错误提示, 并且导致 R.java 自动生成失败。常

3、用的缺省目录和对应资源类型在 SDK 帮助中有表格列出, 简单摘抄如下:资源文件夹内文件夹命名规则上面 说 过 res 文 件夹下的 文件夹命 名 是 有规矩 的,否则 会报类似 “ invalidresource directory name *”的错误提示,除了上表提供的缺省文件夹, 一般可以用缺省文件夹名加短横线加配置相关的限定符构成需要的资源文件夹, 用于区别不同屏幕分辨率、 不同机型特点 (是否带键盘等) 以及不同的本地化资 源等用处,详细参考 API 说明文档。具体案例如下图所示其中的 values-zh-rCN 就是中文简体资源包,用于本地化,至于其它就对照 API 说明文档来分

4、析。一般项目缺省的资源文件夹名称就够了。资源文件夹内的资源文件存放规则 由上面资源表可知, 每个文件夹中存放的文件类型不仅有规定, 而且对文件 内容也是有严格要求的,曾经将一个定义布局的 spinner.xml 文件放置在 res/values,结果就报“ Invalid start tag *Layout spinner.xml ”错误,并导致 R.java 没有生成; 将该布局文件放置在 res/color 下面,虽然没有报错, 但是原本的布局 文件,不再是正确生成为形如“ R.layout.spinner”的布局资源,而是生成为了 “R.color.spinner”的颜色资源索引,具体如

5、下所示:布局文件放置正确的 R.java 中代码public static final class layout public static final int autocomplete=0x7f030000;public static final int spinner=0x7f03000d;布局文件放置错误的 R.java 中代码public static final class color public static final int solid_blue=0x7f050001;public static final int spinner=0x7f050004;另外当一种资源定义 X

6、ML 文件放在不对应的 res 文件夹下,在可视化环境 下,也就不能正确显示和编辑。通过上述一些特性,我们可以猜测出 android 的 aapt 工具的工作原理,先是 根据文件夹名来进行对资源文件和 XML 文件进行不同的解析和编译规则进行解 析和编译, ADT 工具也是根据具体文件夹名称调用不同的规则来可视化编辑和 呈现。使用 eclipse IDE 提供的框架来创建资源由于 Android 资源文件和文件夹有那么多的规矩,所以新手还是建议用 eclipseIDE 提供的创建 XML 文件的框架来创建资源文件和资源文件夹即在你需 要创建资源文件时,通过“ File”“New”“Androi

7、d XML file ”就可以弹出如下的 New Android XML File 对话框,选好工程,填好资源文件名, 在“ What type of resourcewould you like to create” 中勾选需要创建的资源类型,假如是非缺省目录资源就在“ what type of resource configuration would you like? ”添加需要的配置类型,就可以在“ Folder”中自动 生成资源 xml 所在的文件夹, 这个不用修改它。 其它就根据需要来选择, 然后点 击“ Finish”,就可以创建出符合规则的资源文件了。 在这里需要注意的是资源文

8、 件名不能使用大写字母。是不是很省事,又能做出正确的事情啊,呵呵!Android 资源类型及其简单使用上面对 Android 的资源目录的分析中,已经大致展现了 Android 资源类型的 大致脉络,下面从简单资源先入手详细罗列下具体的资源类型和使用。 一般而言, 没有明说资源不能在 XML 资源文件中调用,那么该资源都是既可以在其它 XML 资源文件中调用又可以在 Java 代码中调用的。字符串常量资源( string )字符串资源位于 /res/values目录下, 一般定义为 /res/values/strings.xml文件中 (文件名随意,但是目录是固定的) ,主要定义的是应用程序需

9、要用到的字串资 源,这和 Symbian 的字串资源规划类似,不过更加进步了些。当然,你非要在代 码中使用字串也可以, 但那种方式并不是推荐的。 字串资源有 String、String Array 和 Quantity Strings (Plurals)三类,其各自语法和用例稍微有些区别String 语法text_string上面的 string_name 字符串资源,可以通过如下两种方法调用XML 资源定义中:package:string/string_nameJava代码中:R.string.string_nameString 用例:假设有个资源文件为 res/values/strings

10、.xml,其内容如下 :Hello!那么这个 hello 字串资源在其它 XML 资源文件中的调用如下所示在 java 代码中的调用如下String string = getString(R.string.hello);String Array 的语法text_string上面的 string_array_name字符串资源,可以通过如下两种方法调用XML 资源定义中package:array/string_array_nameJava代码中R.array.string_array_nameString Array 用例:假设有个 String Array 资源在 /res/values/st

11、ringArray.xml 中,内容如下MercuryVenusEarthMars那么在其它资源 XML 文件中,假设有个下拉列表需要用到上面的字符串数 组资源,则可以如下调用在 Java 代码中的调用示例如下Resources res = getResources();String planets = res.getStringArray(R.array.planets_array);Quantity Strings 语法text_string帮助文档中没有给出 XML 资源文件中对其的使用方法,也没有明确说不能 通过 XML 调用,我也没有搞明白这个资源, 所以暂时只给出 Java 代码中

12、对上述 plural_name资源的调用情况R.plurals.plural_name其中关于 zero、one、two、few 和 many 在帮助文档中有详细的释义,这里 就不单独罗列。Quantity Strings 用例假设有个 Quantity Strings 资源定义在 /res/values/stringQuantity.xml 中,内容 如下One song found.%d songs found. 由于这个资源,我还不太会用,所以只好照抄帮助文档的使用,至于 XML 文档中如何使用还不会,在 Java 代码中使用如下所示int count = getNumberOfsong

13、sAvailable();Resources res = getResources();String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);整数常量资源( Integers) 整数常量在 C/C+通常是放在代码里面, android 将整型常量、 Bool 常量和 数组常量等等都可以放到 XML 资源文件中,后面具体介绍这些资源时就不再做 展开了。一般整数常量被放置在 /res/values/integers.xml中,同样文件名可以随意, 但是目录必须固定在 /re

14、s/values/下。Integer 语法integer 上面的 integer_name整数常量,可以通过如下两种方法调用 XML 资源定义中package:integer/integer_nameJava代码中 R.eger_nameInteger 用例 假设整数常量放置在 /res/values/integers.xml中,内容如下 755 我们在代码中使用的时候,通过以下方式进行调用 Resources res = getResources();int maxSpeed = res.getInteger(R.integer.max_spee;d )Integer

15、Array 语法 integer上面定义的 integer_array_name可以用如下两种方法调用 XML 资源定义中package:eger_array_nameJava 代码中 R.eger_array_nameInteger Array 用例假设整数数组放置在 /res/values/intergers.xml中,内容如下所示 481632该资源在 java 代码中的调用为Resources res = getResources();int bits =res.getIntArray(R.array.bits);Typed Array 常量资源Ty

16、ped Array 资源有点类似于 Symbian 中瘦模板类的,用于存放多种不同类 型资源数组的资源, 本来想将这个资源放后面讲解, 但是前面提供了一系列数组 案例,就一并将这个数组也提前罗列下吧。该资源一般放置于 /res/values/arrays.xml中Typed Array 语法resource上面的 typed_array_name资源,可以通过如下两种方法调用XML 资源定义中package:array/typed_array_nameJava代码中R.array.array_nameTyped Array 用例假设有两个 Typed Array 资源定义在 /res/valu

17、es/arrays.xml中,具体如下drawable/homedrawable/settingsdrawable/logout#FFFF0000#FF00FF00#FF0000FF该资源通过以下方法在 java 代码中调用Resources res = getResources();TypedArray icons = res.obtainTypedArray(R.array.icons);Drawable drawable = icons.getDrawable(0);TypedArray colors = res.obtainTypedArray(R.array.icons);int c

18、olor = colors.getColor(0,0);由于每一种类型都是通过不同的 API 来获取数组中的元素,比如上面用例 里面 color 用 int getColor(int index, intdefValue)函数, Drawable 用 Drawable getDrawable(int index) 函数,至于其它相关的类型该调用什么函数来获取具体可 以 参 看 android.content.res.TypedArray 的 源 码 文 件 frameworksbasecorejavaandroidcontentresTypedArray.java来 获 得 更 多 的 详 情

19、。布尔常量资源( bool )该资源一般定义在 /res/values/bools.xml 中。bool 语法true| false上面的 bool_name布尔常量资源,可以通过如下两种方法调用XML 资源定义中package:bool/bool_nameJava代码中R.bool.bool_namebool 资源用例假设有 bool 常量资源定义在 res/values/bools.xml中,内容如下truetrue那么在 xml 资源中的调用可以如下在 Java 代码中的调用如下Resources res = getResources();boolean screenIsSmall =

20、res.getBoolean(R.bool.screen_small);Dimension 常量资源 该资源定义跟屏幕显示相关的一些尺寸常量,一般保存在 /res/values/dimen.xml文件中具体的度量单位有:px(象素 ): 屏幕实际的象素,常说的分辨率 1024*768pixels,就是横向 1024px, 纵向 768px,不同设备显示效果相同。in(英寸 ): 屏幕的物理尺寸 , 每英寸等于 2.54厘米。mm(毫米 ): 屏幕的物理尺寸。pt(点): 屏幕的物理尺寸。 1/72 英寸。dp/dip: 与密度无关的象素,一种基于屏幕密度的抽象单位。在每英寸 160 点的显示器

21、上, 1dp =1px。但 dp 和 px 的比例会随着屏幕密度的变化而改变,不 同设备有不同的显示效果。sp: 与刻度无关的象素,主要用于字体显示 best for textsize,作为和文字相 关大小单位。dimension资源定义语法dimensiondimension资源用例假设定义了一个 dimen 资源在 res/values/dimens.xml文件中25dp150dp30dp16sp我们可以在 XML 资源中进行如下调用在 Java 代码中进行如下调用Resources res = getResources();float fontSize = res.getDimensio

22、n(R.dimen.font_size);颜色常量资源( color )颜色常量通常被定义在 /res/values/colors.xml 文件内,同时颜色资源作为一种 可绘制的资源,也可以被定义在 /res/drawable/文件夹下,调用方式也完全不同, 在这里只介绍作为常量的颜色资源。 虽然两种定义和调用方式不同, 但是颜色的 数值表现形式却是一样的, 都是形如下面的十六进制格式 (后面涉及颜色数值就 不再赘述了)#RGB#ARGB#RRGGBB#AARRGGBB比如#f00表示不透明的 12位红色,而 #80ff0000表示透明的 32位真彩红色 颜色常量语法hex_color上面的

23、color_name 颜色常量可以通过如下两种方法调用XML 资源定义中package:color/color_namJava 代码中R.color.color_name颜色常量用例假设有颜色常量被定义在 res/values/colors.xml中#f00#80ff0000在 XML 要使用该常量资源,可以通过如下方法在 Java 代码中如果想使用该资源,则如下调用Resources res = getResources();int color = res.getColor(R.color.opaque_red);至此我们将 res/values下面定义的资源类型除了风格 (Style)和主

24、题(Theme) 资源外,全部都介绍过了,由于风格和主题案例需要设计布局( layout)和 View 等,所以最后再涉及这两类资源的介绍。状态颜色列表资源( color state list )该资源被放置于 /res/color/目录下面,用来定义一个类似 Button 控件在不同 状态下需要呈现不同的颜色。因此这种 XML 资源文件描述的是跟控件状态相挂 钩的颜色状态,具体见下面语法状态颜色列表资源语法假如有个状态颜色列表资源文件 res/color/colorstatefile.xml 该菜单资源可以通过如下渠道访问 XML 资源定义中 package:color/ colorstat

25、efile Java 代码中 R.color. colorstatefile 状态颜色列表资源用例 有一个定义了 button 状态颜色列表的资源 res/color/button_text.xml selectorxmlns:android= 则在布局文件中一个 Button 控件需要使用该状态颜色,就可以通过如下调 用布局资源( Layout )布局资源是放置于 /res/layout/下面的用于定义 UI 界面的 XML 文件, 该资源 被用于 Activity 或者其他 UI 组件。由于我在学习 android 之前,没有过 Java GUI 开发的经验,所以不清楚 Java里面的 UI设计思想,只知道 Android UI类都是基 于 View 和 ViewGrou

温馨提示

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

评论

0/150

提交评论