R 类
R 类将所有资源对应于自身的一个内部资源类(resourceClass:id、drawable、layout、string)
可以将各类资源打包到相应的文件夹或保存到 xml 文件中:
drawable 文件夹:放置所有 drawable 资源
values 文件夹:存放各种资源 xml 文件
- ids.xml:id 资源,使用 item 标签,type 属性指明为 id
- colors.xml:颜色资源,使用 color 标签,使用 #FFFFFF 形式表示
- dimens.xml:测量资源,保存所有带单位的数值,使用 dimen 标签
- strings.xml:字符串资源,使用 string 标签
- styles.xml:样式资源,使用 sysle 标签标识,使用 item 标签设置属性值
详见:应用资源概览
xml 中使用资源
@resourceClass/resourceName
标识符无需在资源中定义,可直接分配:
@+id/标识符
代码中使用资源
各类型 View 都有资源的 setter 方法,如设置 Id:
setId(R.resourceClass.resourceName);
其他资源可通过 Context.getResources().getXXX(int resId)
获取。
直接使用资源:
tv_exercises.setTextColor(Color.parseColor("#0097E7"));
public static int parseColor (String colorString)
:Parse the color string, and return the corresponding color-int. If the string cannot be parsed, throws an IllegalArgumentException exception. Supported formats are: #RRGGBB #AARRGGBB ‘red’, ‘blue’, ‘green’, ‘black’, ‘white’, ‘gray’, ‘cyan’, ‘magenta’, ‘yellow’, ‘lightgray’, ‘darkgray’
xml 中特殊字符的使用
空格
形如 &名称;
、&#十进制;
或者 &#x十六进制;
是 HTML、XML 等 SGML 类语言的转义序列。
ASCII / EASCII(Extended ASCII)/Unicode 由小到大对容纳的字符进行扩展。
1 个全角空格 = 4 个普通空格。
普通空格: 
= 
= 
= 
=\u0020
(HTML、XML 对多个普通空格将按照一个空格处理)
不换行空格:
= 
= 
= 
(在词组间放置可以防止换行时分割)
 
= 
 
= 
 
= 
= 
= 
 
= 
 
= 
 
= 
 
= 
 
= 
 
= 
 
= 
 
= 
 
= 
= 
中日韩符号和标点符号(全角)空格: 
= 
https://zh.wikipedia.org/wiki/ASCII
https://zh.wikipedia.org/wiki/EASCII
https://dev.w3.org/html5/html-author/charref
http://www.unicode.org/charts/
Unicdoe【真正的完整码表】对照表(一)
使用strings.xml中文本资源发现多个空格只显示一个空格
其他
换行:\n
缩进:\t
" : "
或 "
’ : '
或 '
& : &
或 &
lt(<) : <
或 <
gt(>) : >
或 >
资源限定符
屏幕特征 | 限定符 | 描述 |
大小 | small | 小屏幕设备的资源文件 |
normal | 中等屏幕设备的资源文件 | |
large | 大屏幕设备的资源文件 | |
xlarge | 超大屏幕资源的文件 | |
sw数字dp | Smallest-width Qualifier最小宽度限定符,当屏幕宽度超出数字使用此资源文件 | |
分辨率 | ldpi | 低分辨率设备的资源文件(120dpi以下) |
mdpi | 中等分辨率设备的资源文件(120dpi~160dpi) | |
hdpi | 高分辨率设备的资源文件(160dpi~240dpi) | |
xhdpi | 超高分辨率设备的资源文件(240dpi~320dpi) | |
xxhdpi | 超超高分辨率设备的资源文件(320dpi~480dpi) | |
方向 | land | 横屏设备的资源文件 |
port | 竖屏设备的资源文件 |
更改资源目录
https://developer.android.com/studio/write/add-resources
默认源文件资源目录在 module-name/src/source-set-name/res/
,如果要换成其他目录,在 build.gradle 的 android 中添加:
android {
sourceSets {
main {
res.srcDirs = ['resources/main']
}
debug {
res.srcDirs = ['resources/debug']
}
}
}
还可以指定多个资源目录,用逗号隔开,编译工具会将它们合在一起,若不同目录出现同一资源名,合并时会出错:
android {
sourceSets {
main {
res.srcDirs = ['res1', 'res2']
}
}
}
资源合并优先级:
编译变体 > 编译类型 > 产品特性 > 源文件 > 库依赖项(AAR、三方库)
Android 如何查找最佳匹配资源
- 消除与 Configuration 冲突的限定符
- 按优先级顺序识别表中各个限定符(MCC -> MNC -> 语言 -> …)
- 查看文件夹是否包含该限定符
- 不包含的资源文件夹消除,包含则继续进行 2 ~ 4,直到只剩一个资源文件夹
Configuration
https://developer.android.com/reference/android/content/res/Configuration
java.lang.Object
↳ android.content.res.Configuration
此类描述所有能够影响应用获取资源的设备配置信息,包括用户指定配置选项(地区、缩放)和设备配置(例如输入模式、屏幕大小和方向)。
你可以从 Resources 使用 getConfiguration 获得此类。而在 Activity 上你可以使用 ContextThemeWrapper.getResources() 获得 Resources,如下所示:
Configuration config = getResources().getConfiguration();