Api Guide之App resources学习笔记

本文详细介绍了Android应用程序中资源(res)目录的结构和用途,包括animator、anim、color、drawable、layout、menu、raw、values和xml等目录的功能。讨论了如何针对不同设备配置创建特定资源文件,如语言和地区、屏幕方向、尺寸、像素密度和平台版本。还介绍了资源的别名机制、访问资源的方式、处理运行时变化的策略、本地化以及各种类型的资源,如颜色状态列表、Drawable和布局。
摘要由CSDN通过智能技术生成

1 Resource配置目录(相关的类在 androidcontent.res包中)
/res
目录下存放 resources,在此目录下有许多子目录,各目录的含义简述如下:(有些待添加)
animator/
XML files that define property animations.

anim/
XML files that define tween animations. property animations也可以存放此目录,但为了明确,
应该把这两类animation分开存储.

color/
XML files that define a state list of colors. 注意此目录不是用来定义单个的color的,而是用来
定义 state list of colors(如当button按下/松开 时的颜色变化).
这个 state list 被编译成 ColorStateList 类.
具体的 state list of colors 可以在下面的 "Color State List Resource"找到说明文档.

drawable/
各种 .png .jpg .gif文件;
但此目录下的 drawable不仅仅指.jpg的这种图像文件,还包括:
Layer List/ State List/Level List/Transition Drawable/Inset Drawable/Clip Drawable/
Scale Drawable/Shape Drawable.
具体这些分别指什么样式的资源请参看下面的"Drawable"部分.

layout/
XML files that define a user interface layout. 此目录没有什么特殊的,很好理解

menu/
ML files that define application menus

raw/
此目录暂时还没有用到,但它还是易于理解的
Arbitrary files to save in their raw form. To open these resources with a raw InputStream,
call Resources.openRawResource() with the resource ID, which is R.raw.filename.
也可以使用/res/assets 目录并配合AssetManager.

values/
此目录是相当复杂的一个目录,这个目录下的xml文件是可以随便命名的,每一个<resources>元素定义
一个resource,无论是string还是menu或是style都应该是<resources>的孩子结点.
虽然此目录下的xml文件可以随便命名,但有一些惯例的命名方式:
arrays.xml for resource arrays(typed arrays)
colors.xml for color values
dimens.xml for dimension values
strings.xml for string values
styles.xml for styles(有时候还可以有一个themes.xml,这样可以把style和theme分开一些)

xml/
Arbitrary XML files that can be read at runtime by calling Resources.getXML()

注意:以上的目录指的是 default 配置,android为了兼容不同screen,不同设备,你可以设置
相关的特定目录,如 layout-land/ 专门为横屏时提供layout(和默认的 layout/ 相对应).


2 针对特定设备/状态 的Resource文件

在/res目录下人为新建一个目录,命名为 <resources_name>-<config_qualifier>.
其中 <resources-name>是指默认的目录名子, config_qualifier 是针对不同的配置命名的名子.
config_qualifier的可选的名字需要参考Api Guide中的"Providing Resources"中的表2.
在这里我们只需要知道常用的几个:
Language and region
如 values-en/ 下的strings.xml为程序在英语环境下需要显示的文字;
values-zh/ 下的stirngs.xml为程序在中文环境下需要显示的文字;
values-en-rUS/下的strings.xml用于在英语环境的美国显示;
关于各种语言及地区的代号可以参考

http://www.loc.gov/standards/iso639-2/php/code_list.php


Screen orientation
port(竖屏) 或 land(横屏)
如 layout-land

Screen size
共有以下几种屏:
small
normal
large
xlarge
另外并不是说 values-normal 只用于正常屏设备,如果没有和 large 相对应的目录,则values-normal

也可能应用于large屏设备.
但是 values-large 决不能应用在 values-normal或values-small的屏设备上.

Screen pixel density
ldpi
mdpi
hdpi
xhdpi
nodpi
tvdpi(不常用)

Platform Version(API level)
v3/v4/v7等.


正常情况下, drawable-v3 可以在v3或v4,v5,...等更高版本中使用,
但 Android1.5(v3)及Android1.6(v4)有个bug,这两个版本是"准确"匹配的,即 drawalbe-v1
并不能应用于 Android1.5和Android1.6. 所以如果你的程序准备支持 android1.0~android3.0
那么你应该建立的子目录为:drawable/(for 1.5 and lower),drawable-v4(for 1.6),
drawable-v6(for 2.0.1 and later)

另外注意:
The qualifiers must be in the order listed in table 2. For example:
[Wrong]: drawable-hdpi-port/
[Correct]: drawable-port-hdpi/


Creating alias resources

nimation, menu, raw, and other unspecified resources in the xml/ 不提供别名机制
下面是一些 alias 的例子:
假设 res/drawable/ 下有一个 icon_ca.png
如果你想要res/drawable-en-rCA/ 及 res/drawable-fr-rCA/ 有一个同样的文件,你可以使用别名
机制来减少应用程序大小.
在drawable-en-rCA和drawable-fr-rCA目录下分别建立一个 icon.xml 文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon_ca" />
这时这个 icon.xml 文件就会被解析为 R.drawable.icon,而它只是icon_ca.png的一个别名.

layout/下有一个 main_ltr.xml ,你想另建一个xml文件,此文件内容和main_ltr.xml一样,则可以使用
别名:
main.xml

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>
这个R.layout.main和R.layout.main_ltr具有相同的内容.注意<merge><include>的用法.

其它简单的值的别名:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <!-- hi是hello的别名,其实也可以看成是使用已定义的string -->
    <string name="hi">@string/hello</string>
</resources>
另一个例子:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#f00</color>
    <color name="highlight">@color/red</color>
</resources>
一般都会为res/下的每种资源提供一个默认,但对于 screen density 可以不用提供默认,系统会scale
the bitmaps.
另外,android1.5 or lower 并不支持screen size/density/screen aspect 的特征,所以它们会忽略
这些特征相关的后缀,如: 如果只有 drawable-ldpi/, drawable-mdpi目录没有默认的drawable,则
Android1.5或更低版本会选择drawable-ldpi/, drawable-mdpi中的任意一个,因为它们会忽略后缀
-ldpi/-mdpi.

3 Accessing Resources

esources 类:
Resources r = Context.getResources();
r.getString()/r.getDrawable() 等等.(和此类相关的还有

AssetManager/DisplayMetrics/Configuration等,暂不熟悉)

记心里: R 类里都是工具生成的 integer 型的ID文件,并不能直接翻译为相关的类型,如果想得到相关
的String/Drawable/Color等就需要使用 Resources.getXXX()方法.

代码里使用Resource的语法:
[<package_name>.]R.<resource_type>.<resource_name>
一般访问自己包里面的Resource,不需要 package name.
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,

myarray));
上面是一个在代码里访问资源且需要包名的例子:android.R.layout.simple_l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值