Android Resource

阅读: 评论:0

2024年2月8日发(作者:)

Android Resource

Android Resource介绍和使用

2010-04-21 21:54:01

标签:Android resource 资源

原创作品,允许转载,转载时请务必以超链接形式标明文章

原始出处 、作者信息和本声明。否则将追究法律责任。/268543/302529

1. 相关文件夹介绍

在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件。在后面会介绍如何读取assets文件夹的资源!

res文件夹里面的多个文件夹的各自介绍(来自网上的Android开发指南中文版内容):

目录Directory

res/anim/

资源类型Resource Types

XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象

res/drawable/

.png、.、.jpg文件,它们被编译进以下的Drawable资源子类型中:

要获得这种类型的一个资源,可以使用wable(id)

位图文件

9-patches(可变尺寸的位图)

为了获取资源类型,使用ources().getDrawable(d)

注意:放在这里的图像资源可能会被aapt工具自动地进行无损压缩优化。比如,一个真彩色但并不需要256色的PNG可能会被转换为一个带调色板的8位PNG。这使得同等质量的图片占用更少的资源。所以我们得意识到这些放在该目录下的二进制图像在生成时可能会

发生变化。如果你想读取一个图像位流并转换成一个位图(bitmap),请把图像文件放在res/raw/目录下,这样可以避免被自动优化。

res/layout/

被编译为屏幕布局(或屏幕的一部分)的XML文件。参见布局声明(Declaring

Layout)

res/values/

可以被编译成很多种类型的资源的XML文件。

注意: 不像其他的res/文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。XML元素类型控制这些资源应该放在R类的什么地方。

尽管这个文件夹里的文件可以任意命名,不过下面使一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中):

定义数组

定义color drawable和颜色的字符串值(color string

values)。使用wable()和or()分别获得这些资源。

定义尺寸值(dimension value)。使用ension()获得这些资源。

定义字符串(string)值。使用ing()或者t()获取这些资源。getText()会保留在UI字符串上应用的丰富的文本样式。

定义样式(style)对象。

res/xml/

res/raw/

任意的XML文件,在运行时可以通过调用()读取。

直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用wResource(),参数是资源的ID,即lename。

2.自动生成的R class

在项目文件夹的gen文件夹里面有个,我们平常引用的资源主要引用这个类的变量。

注意:R类是自动生成的,并且它不能被手动修改。当资源发生变动时,它会自动修改。

3. 在代码中使用资源

下面是一个引用资源的语法:

ce_ce_name 或者 ce_ce_name

其中resource_type是R的子类,保存资源的一个特定类型。resource_name是在XML文件定义的资源的name属性,或者有其他文件类型为资源定义的文件名(不包含扩展名,这指的是drawable文件夹里面的类似的文件,name=icon)。 Android包含了很多标准资源,如屏幕样式和按钮背景。要在代码中引用这些资源,你必须使用android进行限定,如_background。

下面是官方给出的一些在代码中使用已编译资源的正确和错误用法的例子:

1. // Load a background for the current screen from a drawable resource.

2. dow().setBackgroundDrawableResource(_background_image);

3.

4. // WRONG Sending a string resource reference into a

5. // method that expects a string.

6. dow().setTitle(_title);

7.

8. // RIGHT Need to get the title from the Resources wrapper.

9. dow().setTitle(t(_title));

10.

11. // Load a custom layout for the current screen.

12. setContentView(_screen);

13.

14. // Set a slide in animation for a ViewFlipper object.

15. nimation(imation(this,

16. pace_in));

17.

18. // Set the text on a TextView object.

19. TextView msgTextView = (TextView)findViewByID();

20. t(_message);

查了SDK Doc,才明白为什么le要先t,原来setTitle的参数是CharSequence,t(int)返回的是CharSequence;而其他setText的参数有的是CharSequence,有的是int(这就是Resources变量值)。

同时官方还给了两个使用系统资源的例子:

1. //在屏幕上显示标准应用程序的图标

2. public class MyActivity extends Activity {

3. public void onStart() {

4. requestScreenFeatures(FEATURE_BADGE_IMAGE);

5. t();

6. setBadgeResource(_def_app_icon);

7. }

8. }

9.

10. //应用系统定义的标准"绿色背景"视觉处理

11. public class MyActivity extends Activity

12. public void onStart() {

13. t();

14. setTheme(_Black);

15. }

16. }

4. xml文件内引用资源

1) 引用自定义的资源

android:text="@string/hello"

这里使用"@"前缀引入对一个资源的引用--在@[package:]type/name形式中后面的文本是资源的名称。在这种情况下,我们不需要指定包名,因为我们引用的是我们自己包中的资源。type是xml子节点名,name是xml属性名:

1. <?xml version="1.0" encoding="utf-8"?>

2.

3. Hello World, HelloDemo!

4.

2) 引用系统资源

android:textColor="@android:color/opaque_red" 指定package:

android

3) 引用主题属性

另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在样式资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。

android:textColor="?android:textDisabledColor"

注意,这和资源引用非常类似,除了我们使用一个"?"前缀代替了"@"。当你使用这个标记时,你就提供了属性资源的名称,它将会在主题中被查找--因为资源工具知道需要的属性资源,所以你不需要显示声明这个类型(如果声明,其形式就是?android:attr/android:textDisabledColor)。除了使用这个资源的标识符来查询主题中

的值代替原始的资源,其命名语法和"@"形式一致:?[namespace:]type/name,这里类型可选。

5. 替换资源(为了可替换的资源和配置)

个人理解这个替换资源主要用于适应多种规格的屏幕,以及国际化。对于这部分的内容,请参考/guide/topics/resources/,以后再研究!

6. Color Value

语法:

1. #color_value

可以保存在res/values/ (文件名可以任意)。

xml引用:android:textColor="@color/color_name"

Java引用: int color = or(_name)

其中#color_value有以下格式(A代表Alpha通道):

#RGB

#ARGB

#RRGGBB

#AARRGGBB

xml示例(声明两个颜色,第一个不透明,第二个透明色):

1. <?xml version="1.0" encoding="utf-8"?>

2.

3. #f00

4. #80ff0000

5.

Drawables

语法:

1. color_value

可以保存在res/values/。

xml引用:android:background="@drawable/color_name"

java引用:Drawable redDrawable = wable(_name)

color_name和上面的一样。个人认为,一般情况下使用color属性,当需要用到paintDrawable时才使用drawable属性。

xml示例:

1. <?xml version="1.0" encoding="utf-8"?>

2.

3. #f00

4. #80ff0000

5.

8. 图片

一般放在res/drawable/里面。官方提示png (preferred), jpg (acceptable),

gif (discouraged),看来一般使用png格式比较好!

xml引用 @[package:]drawable/some_file

java引用 _file 引用是不带扩展名

9. dimension

语法:

1. dimen_value单位

一般保存为res/values/。

度量单位:

px(象素): 屏幕实际的象素,常说的分辨率1024*768pixels,就是横向1024px, 纵向768px,不同设备显示效果相同。

in(英寸): 屏幕的物理尺寸, 每英寸等于2.54厘米。

mm(毫米): 屏幕的物理尺寸。

pt(点) : 屏幕的物理尺寸。1/72英寸。

dp/dip : 与密度无关的象素,一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp

= 1px。但dp和px的比例会随着屏幕密度的变化而改变,不同设备有不同的显示效果。

sp : 与刻度无关的象素,主要用于字体显示best for textsize,作为和文字相关大小单位。

XML: android:textSize="@dimen/some_name"

Java: float dimen = en(_name)

xml示例:

1. <?xml version="1.0" encoding="utf-8"?>

2.

3. 1px

4. 2dp

5. 16sp

6.

10. string

下面是官方给出的正确/错误的例子:

1. //不使用转义符则需要用双引号包住整个string

2. "This'll work"

3.

4. //使用转义符

5. This'll also work

6.

7. //错误

8. This won't work!

9.

10. //错误 不可使用html转义字符

11. XML encodings won't work either!

对于带格式的string,例如在字符串中某些文字设置颜色,可以使用html标签。对于这类型的string,需要进行某些处理,在xml里面不可以被其他资源引用。官方给了一个例子来对比普通string和带格式string的使用:

1. <?xml version="1.0" encoding="utf-8"?>

2.

3. Welcome!

4. We are so glad to see you.

5.

Xml代码

1.

2. android:layout_width="fill_parent"

3. android:layout_height="wrap_content"

4. android:textAlign="center"

5. android:text="@string/simple_welcome_message"/>

Java代码

1. // Assign a styled string resource to a TextView on the current screen.

2. CharSequence str = getString(_welcome_message);

3. TextView tv = (TextView)findViewByID();

4. t(str);

另外对于带风格/格式的string的处理,就麻烦一点点。官方给了一个例子:

1. <?xml version="1.0" encoding="utf-8"?>

2.

3. %1$d results for <b>&quot;%2$s&quot;</b>

4.

这里的%1$d是个十进制数字,%2$s是字符串。当我们把某个字符串赋值给%2$s之前,需要用htmlEncode(String)函数处理那个字符串:

1. //title是我们想赋值给%2$s的字符串

2. String escapedTitle = code(title);

然后用() 来实现赋值,接着用fromHtml(String) 得到格式化后的string:

1. String resultsTextFormat = getContext().getResources().getString(_results_resultsTextFormat);

2. String resultsText = (resultsTextFormat, count, escapedTitle);

3. CharSequence styledResults = ml(resultsText);

11. assets文件夹资源的访问

assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。

1. 先在Activity里面调用getAssets()来获取AssetManager引用。

2. 再用AssetManager的open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream。

3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得()。

4.调用()关闭AssetManager。

至于style and theme,Layout,动画Animation,Menu则查看本博客的其他文章。附上官方的相应介绍网址/guide/topics/resources/

另外,官方还介绍了icon design的Guidelines

/guide/practices/ui_guidelines/icon_

本文出自 “学习Android” 博客,请务必保留此出处/268543/302529

liujian6349、love_dsjing、yarin

3人

类别:Android┆技术圈( 0)┆阅读( 5812)┆评论( 1) ┆

推送到技术圈┆返回首页

了这

上一篇

Android UI学习 - Linear Layout, RelativeLayout 下一篇

[转]android

animation的应用实例

文章评论

[1楼]

yarin

很详细,很好!谢谢分享!

2011-01-07 12:15:07

Android Resource

本文发布于:2024-02-08 12:59:31,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170736837167525.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:asp选择题
下一篇:WEB 题库
标签:资源   文件   使用   屏幕   文件夹   引用   编译
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23