接下来继续,先介绍本帖主要内容:
1)资源文件概述
2)资源定义及运用
3)国际化
惯例,先废话一会,android程序中,人们大都采用XML文件静态描述一些属性,定义界面,或者存储一些参数,可以夸张地说,android程序开发之所以开发如此简便、快捷,XML占大半功劳。所以进入本帖交流学习前,先普及一些XML知识。
XML(eXtensible Markup Language)
定义:
维基百科:一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
百度百科:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
2个百科定义大同小异,个人偏向维基,XML设计用来传送及携带数据信息,这区别于HTML,HTML语言设计面向于数据表现。
用途:
1、简化操作。Android便采用XML文件定义控件,将控件中各种属性集成,在程序开发中简化了源代码的编写。
2、实现数据分离。使用HTML实现动态数据显示,是件十分麻烦的事,每次数据改变都需要花费大量时间修改HTML。XML的独立式数据文件存储的出现,给网页开发省下不少功夫,让HTML运用重点偏向于布局和显示。
3、方便数据传输。不同系统间进行数据传送,经常会发生数据存储格式不兼容的问题,从而导致数据传送失败。XML的出现使不兼容问题成了历史,xml以纯文本格式存储数据,即使是不同系统,只要能进行xml解析,数据互送不是问题。
。。。
好了,正式进入正题!
一、资源文件概述
1、资源存储
在Eclipse开发的每一个android项目都会有一个res目录跟一个assets目录,这些文件用于存储android程序资源。
res目录下可新建一些固定名字的子文件,用于保存各类XML资源。Android提供了一个资源编译工具,它会按照事先约定的目录结构,把res目录下的文件按自动编译,并在gen目录下生成R.java文件,应用程序可以通过R.java对资源文件进行引用。
assets目录比较少用,主要用于保存一些数据文件,与res目录下XML文件不同,assets文件保存的是一些二进制文件,这些文件并没有经过编译,访问时,需要通过字节流。
SD卡,手机sd卡就相当于pc机中的硬盘,我们开发软件的时候,难免会引入一些较大的应用资源,如果贪方便全塞到res或assets文件中,那恭喜你,你开发了一个空前绝后的龟速软件。Sd卡的出现使大储存软件开发成为可能。
2、资源类型
简单的概述,按资源文件类型划分,android资源可分为XML、图像和其他。如表:
Android支持的资源
|
|
|
|
|
保存字符串、颜色、尺度、类型、主题等资源,可以是任意文件名,对于字符、颜色、尺寸等信息采用key-value形式表示,对于资源、主题等资源,采用其他形式表示。 |
|
|
保存布局信息,一个资源文件表示一个View或ViewGroup的布局。 |
|
|
保存菜单资源。一个资源文件表示一个菜单(包括子菜单) |
|
|
|
|
|
在该目录中文件可以是任意类型的XML文件,这些文件可以在运行时被读取。 |
|
|
在该目录中的文件虽然也会被封装在apk文件中,当不会被编译。该目录可以放各类型的文档、音频、视频文件。 |
|
|
该目录中的文件可以是多种格式的图像文件,例如:bmp、png、gif、jpg等。该目录中的图像对分辨率要求不是很高。Aapt工具会自动优化。 |
|
|
跟res\raw中资源一样,不会被编译,不同的是该目录中资源文件没有生成资源ID,可以自由操作。 |
二、资源定义及运用
前面粗略介绍资源文件各类型,下面介绍各种资源的定义及运用:
1、简单的数值类资源
颜色资源 |
|
|
定义格式 |
规定含有标准的XML文件头声明:<? Xml version=”1.0” encoding=”utf-8” 根节点使用<resources>,子项为<color> < rescources> <color name=”colcor_name”>#color_value</color> < /rescources> |
存储路径 |
res/values/colors.xml (命名任意,必须遵守一定规则) |
类型匹配 |
|
资源引用 |
java引用:R.color.color_name int color = getRescources.getColor(R.color.color_name) XML引用:@[package] color/color_name < TextView android:textColor=”@color/color_name”/> |
备注 |
android允许将颜色值作为资源保存于资源文件中,规定颜色值必须以#开头,支持4种表示方式: #RGB #ARGB #RRGGBB #AARRGGBB R、G、B 为三原色红、绿、蓝,A表示透明度,即lpha。A、R、G、B的取范围都是0—255,R、G、B值越大,颜色越深,如果都为0,表示颜色为黑色,都为255,表示白色。#RGB #ARGB 跟#RRGGBB #AARRGGBB的区别在于前者R、G、B的取值范围是0—15,颜色值跟透明度的8位字节的高四位和低4位相同,想表示更多颜色值,则需要使用后者。 |
字符串 |
|
|
定义格式 |
规定含有标准的XML文件头声明:<? Xml version=”1.0” encoding=”utf-8” 根节点使用<rescources>,资源声明使用<string>关键字 <rescources> <string name=”string_name”>string_values</string> < /rescources> |
存储路径 |
|
类型匹配 |
|
资源引用 |
Java引用: CharSequence str = R.string.string_name XML引用:<TextView android:text=”@string/string_name”> |
测量单位 |
|
|
定义格式 |
规定含有标准的XML文件头声明:<? Xml version=”1.0” encoding=”utf-8” 根节点使用<rescources>,资源声明使用<dimen>关键字 <rescources> <dimen name=”dimen_name”>string_values</dimen > < /rescources> |
存储路径 |
|
类型匹配 |
R.dimen.dimen_name 对应java中的float |
资源引用 |
Java引用: float dimen = Resources.getDimen(R.dimen.dimen_name)
XML引用:<TextView android:textSize=”@dimen/dimen_name> |
备注 |
Android中已经定义了标准的度量单位: px:表示屏幕实际的像素。如:320*480表行向320个像素,纵向480个 in:表示英寸,是屏幕的物理尺寸,一英寸=2.53cm mm:表示毫米,屏幕的物理尺寸 pt:表示一个点,是屏幕的物理尺寸,大小为1英寸的1/72 dp:与密度无关的像素,这个是一个基于屏幕物理密度的抽象单位。 sp:与比例无关的像素,跟dp类似。 |
2、可绘制类资源
点阵图像资源 |
|
|
定义格式 |
.9.png 和png(最好),jpeg(一般), gif(尽量少用) |
存储路径 |
Res/drawable/drawable_name.xml |
类型匹配 |
R.drawable.drawable_name 对应java中的BitmapDrawable |
资源引用 |
Java引用: R.drawable.some_file 不需要后缀名 XML引用:<ImageView android:src=”@drawable/some_file”> |
单色图像资源 |
|
|
定义格式 |
规定含有标准的XML文件头声明:<? Xml version=”1.0” encoding=”utf-8” 根节点使用<rescources>,资源声明使用<drawable>关键字 <rescources> < drawable name=”color_name”>color_values</string> < /rescources> |
存储路径 |
|
类型匹配 |
R.drawable.some_name 对应java中的PaintDrawable |
资源引用 |
Java引用: Drawable red = Rescources.getDrawable(R.drawable.color_name); XML引用:<TextView android:background=”@drawable/color_name”> |
可拉伸图像资源 |
|
|
定义格式 |
|
存储路径 |
Res/drawable/file_name.9.pngl |
类型匹配 |
对应java中的NicePatchDrawable |
资源引用 |
Java引用:R.drawable.some_name XML引用:@drawable/some_file |
备注 |
该类图像时使用NinePatch工具制作出来的可拉伸图像资源,主要用于绘制一些背景框,比如按键。NinePatch图像的原理是把图像的4个拐角单独保存,然后定义一个像素内容填充,从而无论图像如何放大、缩小,都不会失真。 |
|