关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。
目录
- 一、导读
- 二、概览
- 三、资源类型分组
- 四、配置限定符名称表
- 五、限定符命名规则
- [六、 推荐阅读](#六、 推荐阅读)
一、导读
我们继续总结学习Android 基础知识,温故知新。
资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。
本文档介绍了如何对 Android 项目中的资源进行分组。此外,还介绍了如何为特定设备配置提供备用资源,以及如何从您的应用代码或其他 XML 文件访问这些资源。
二、概览
在项目中有一个 res 文件夹, 里面包含所有资源,在这个文件夹下,再根据每种类型的资源新建不同的目录来存放不同类型的资源。
三、资源类型分组
根据资源的类型,我们大致可以分成以下几种:
目录 | 资源类型 |
---|---|
animator | 用于定义属性动画的 XML 文件。 |
anim | 用于定义补间动画的 XML 文件。属性动画也可保存在此目录中,但为了区分这两种类型,属性动画首选 animator/ 目录。 |
color | 定义颜色状态列表的 XML 文件。如需了解详情,请参阅 ColorStateList。 |
drawable | 位图文件(PNG、.9.png、JPG 或 GIF)或编译为以下可绘制资源子类型的 XML 文件 |
mipmap | 适用于不同启动器图标密度的可绘制对象文件。如需详细了解如何使用 mipmap 文件夹管理启动器图标,请参阅将应用图标放在 mipmap 目录中。 |
layout | 用于定义界面布局的 XML 文件。如需了解详情 |
menu | 用于定义应用菜单(例如选项菜单、上下文菜单或子菜单)的 XML 文件。 |
raw | 需以原始形式保存的任意文件。如要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()。但是,如需访问原始文件名和文件层次结构,请考虑将资源保存在 assets 目录(而非 res/raw)下。assets 中的文件没有资源 ID,因此您只能使用 AssetManager 读取这些文件。 |
values | 包含字符串、整数和颜色等简单值的 XML 文件。values 目录中的文件可描述多个资源。对于此目录中的文件, 元素的每个子元素均会定义一个资源。例如, 元素会创建 R.string 资源, 元素会创建 R.color 资源。 |
xml | 可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(例如搜索配置)都必须保存在此处。 |
font | 带有扩展名的字体文件(例如 TTF、OTF 或 TTC),或包含 元素的 XML 文件。如需详细了解以资源形式使用的字体,请参阅将字体添加为 XML 资源。 |
四、配置限定符名称表
如果需要适配不同的设备,我们的资源也要适配多套, 其命名格式如下:
java
<resources_name>-<qualifier>
<resources_name> 是相应默认资源的目录名称(如上面表格 中所定义 values , drawable)。
<qualifier> 是指定要使用这些资源的各个配置的名称(如表 下表 中所定义),可以追加多个 <qualifier>,并使用短划线进行分隔。
drawable-hdpi
drawable-night-hdpi
限定符值 | 配置说明 |
---|---|
MCC 和 MNC | 移动设备国家/地区代码 (MCC),(可选)后跟设备 SIM 卡中的移动设备网络代码 (MNC)。示例:mcc310、mcc310-mnc004、mcc208-mnc00 |
en、fr等等 | 语言、脚本(可选)和区域(可选),用于应用本地化 |
ldrtl、ldltr | 应用的布局方向,ldrtl 是指"布局方向从右到左"。ldltr 是指"布局方向从左到右"(默认的隐式值)。 |
swdp | 最小宽度,应用可用屏幕区域的最短尺寸,示例:sw320dp、sw600dp、sw720dp等等 |
wdp、hdp | 可用宽度和高度,指定资源使用的最小可用屏幕宽度或高度(以 dp 为单位,由 值定义),示例:、w720dp、w1024dp、h720dp、h1024dp等等 |
small、normal、large、xlarge | 屏幕尺寸 |
long、notlong | 屏幕宽高比 |
round、notround | 圆形屏幕 |
widecg、nowidecg | 广色域 |
highdr、lowdr | 高动态范围 (HDR) |
port、land | 屏幕方向 |
car、desk、television、appliance、watch、vrheadset | 界面模式,如车载、桌面、电视、不带显示屏的、手表、虚拟现实耳机 |
night、notnight | 夜间模式 |
ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi、nodpi、tvdpi、anydpi、nnndpi | 屏幕像素密度 (dpi) |
notouch、finger | 触摸屏类型,如设备没有触摸屏、设备有一个专供用户通过手指直接与其交互的触摸屏 |
keysexposed、keyshidden、keyssoft | 键盘可用性 |
nokeys、qwerty、12key | 主要的文本输入法 |
navexposed、navhidden | 导航键可用性 |
v3、v4、v7等等 | 平台版本(API 级别),设备支持的 API 级别。例如,v1 对应 API 级别 1(搭载 Android 1.0 或更高版本的设备);v4 对应 API 级别 4(搭载 Android 1.6 或更高版本的设备)。如需了解有关这些值的详细信息,请参阅 Android API 级别文档。 |
- ldpi:低密度屏幕;约为 120 dpi。
- mdpi:中密度(传统 HVGA)屏幕;约为 160 dpi。
- hdpi:高密度屏幕;约为 240 dpi。
- xhdpi:超高密度屏幕;约为 320 dpi。此项为 API 级别 8 中的新增配置。
- xxhdpi:超超高密度屏幕;约为 480 dpi。此项为 API 级别 16 中的新增配置。
- xxxhdpi:超超超高密度屏幕使用(仅限启动器图标,请参阅支持不同的像素密度);约为 640 dpi。此项为 API 级别 18 中的新增配置。
这六种主要密度之间的缩放比例为 3:4:6:8:12:16(tvdpi 密度忽略不计)。因此,9x9 (ldpi) 位图相当于 12x12 (mdpi)、18x18 (hdpi)、24x24 (xhdpi) 位图,依此类推。
- nodpi:用于您不希望为匹配设备密度而进行缩放的位图资源。
- tvdpi:密度介于 mdpi 和 hdpi 之间的屏幕;约为 213 dpi。这不属于"主要"密度组。它主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将视情况对其进行缩放。此项为 API 级别 13 中的新增配置。
- anydpi:适合所有屏幕密度,其优先级高于其他限定符。这对于矢量可绘制对象非常有用。此项为 API 级别 21 中的新增配置。
- nnndpi:用于表示非标准密度,其中 nnn 是正整数屏幕密度。大多数情况下不使用此限定符。使用标准密度存储分区,可显著减少因支持市场上各种设备屏幕密度而产生的开销。
五、限定符命名规则
以下是一些使用配置限定符名称时需遵循的规则:
- 可以为单组资源指定多个限定符,并使用短划线分隔。例如,drawable-en-rUS-land 适用于屏幕方向为横向且语言为美式英语的设备。
- 这些限定符必须遵循上面表 中列出的顺序。
java
错误:drawable-hdpi-port
正确:drawable-port-hdpi
- 不得嵌套备用资源目录。例如,您的目录不能为 res/drawable/drawable-en/。
- 值不区分大小写。
- 每种限定符类型仅支持一个值。
java
错误:drawable-es-fr
正确:drawable-es 和 drawable-fr