资源文件夹res/概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WAN_EXE/article/details/83177113

安卓的资源文件通常有bitmaps, layout布局,字符串,动画指令等,它们是和代码分开的,所以你可以独立地管理它们。你需要通过命名不同的文件夹,为不同的设备提供可选的资源,那么系统就会在程序运行的时候选择合适的资源。比如,你想根据屏幕的尺寸提供不同的UI布局,你通过系统生成的R类中包含的资源ID的方式访问它们

1.res/支持的文件夹类型

文件夹 描述
animator/ 定义动画的属性。
anim/ tween 动画,也可以存放animator/文件夹的内容。
color/ 颜色的相关定义。
drawable/ Bitmap文件(.png, .9.png, .jpg, .gif)或者是图像xml文件。
mipmap/ 定义不同的程序启动图标。
layout/ 用户界面的xml布局文件。
menu/ 程序的菜单栏,比如选择菜单。
raw/ 原始文件形式,通过调用Resource.openRawResource()打开获取InputStream流
values/ 简单值,比如字符串,整形,颜色值,所有资源都在<resources>元素下面,典型的文件有arrays.xml, colors.xml, strings.xml, styles.xml.
xml/ 任意的xml文件,可以通过Resources.getXML调用。
font/ 字体文件,比如.ttf, .otf, .ttc,或者包含在<font-family>元素的xml文件。

2.提供可选资源

你需要为不同的语言提供可选的资源,你还需要为不同的屏幕提供可选的资源。在程序运行的时候,系统会检查当前设备的配置来选择合适的资源进行匹配。

通常文件夹的创建形式是<resource_name>-<config_qualifier>, <resource_name>是上面表格中对应的资源文件夹,<qualifier>是下面表格中的配置,只列举部分内容。

语言和区域 en fr en-rUS
屏幕尺寸 small, normal large, xlarge
屏幕分辨率 mdpi, hdpi, xhdpi, xxhdpi
安卓版本 v4, v7, v18

文件夹的创建可以选择多个<qualifier>,比如drawable-en-rUS-land,应用于横屏的英语设备,但是应该遵循下面的规则:

①<qualifier>的顺序需要遵守上面表格的排列顺序。

②可选文件不能被叠加,比如res/drawable/drawable-en/。

③字符都是需要注意大小写的。

④一种前缀对应一种类型,比如如果你想支持英语和法语,不能写成drawable-rES-rFR/。

3.创建资源别名

①Drawable

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="icon">@drawable/icon_ca</drawable>
</resources>

你可以通过R.drawable.icon的方法访问R.drawable.icon_ca文件资源。

②Layout

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>

使用<merge>标签,如果这个文件命名为main.xml那么可以通过R.layout.main访问main_ltr文件。

③String

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

4.资源访问

下面是如何访问它们的例子

// Load a background for the current screen from a drawable resource
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

访问资源文件的语法规则

@[<package_name>:]<resource_type>/<resource_name>

如果在一个package下面,那么包名可以省略,如果访问系统资源就需要加上android,比如

android:textColor="@android:color/secondary_text_dark"

访问样式属性的规则

?[<package_name>:][<resource_type>/]<resource_name>

注意和前面的不同,包名和资源类型名是可以省略的。

如果你想直接访问原始文件,可以建立一个assets/文件夹,系统是不会为它生成资源ID的,你可以通过AssetManager进行访问。但是如果你只是想获取原始数据的话,你可以将它们保存在raw/目录下面,你可以通过openRawResource()获取输入流。

5.系统资源匹配

系统就是根据上面的规则在运行的时候选择最佳的资源进行设备匹配的。

猜你喜欢

转载自blog.csdn.net/WAN_EXE/article/details/83177113