Android res资源查找
Android手机分辨率越来越多,对于外发的三方应用,如何对尽量多不同分辨率的手机进行自适应,就显得尤为重要。自适应良好,一方面可以降低apk的大小,为用户下载节省流量;在不同的机型上均拥有良好的效果,更容易吸引用户;也可以减少工程师的开发时间。那么,如何做到自适应呢?
- 代码中获取屏幕分辨率,按照比例自定义布局。该方法会造成代码阅读困难,合理使用;
- 合理配置资源文件(res目录)。
常用的缺省目录和对应资源类型在SDK帮助中有表格列出,简单摘抄如下
res/animator
存放定义了property animations(android 3.0新定义的动画框架)的XML文件
res/anim/
存放定义了补间动画(tweened animation)或逐帧动画(frame by frame animation)的XML文件。(该目录下也可以存放定义property animations的XML文件,但是最好还是分开存放)
res/raw/
存放直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID,即R.raw.somefilename。
res/drawable/
存放能转换为绘制资源(Drawable Resource)的位图文件(后缀为.png, .9.png, .jpg, .gif的图像文件)或者定义了绘制资源的XML文件
res/color/
存放定义了颜色状态列表资源(Color State List Resource)的XML文件
res/layout/
存放定义了用户界面布局的XML文件
res/menu/
存放定义了应用程序菜单资源的XML文件
res/values/
存放定义了多种类型资源的XML文件
这些资源的类型可以是字符串,数据,颜色、尺寸、样式等等
res/xml/
存放任意的XML文件,在运行时可以通过调用Resources.getXML()读取
资源限定符 - 详细见附件
-命名规则
能够给单一的资源集合指定多个限定符,限定符用短横线分开。例如:drawable-en-rUS-land
限定符必须按照上表列出的顺序来使用,如:
错误用法:drawable-hdpi-port
正确用法:drawable-port-hdpi
可选资源目录不能嵌套,如:不能用以下这样的目录结构:
res/drawable/drawable-en/
值是大小写敏感的。资源编译器为了避免有关大小写敏感的文件系统问题,会把目录名转换成小写。命名中的任何大写字母只是为了方便阅读。
每个限定符类型只能支持一种资源值。
错误的命名eclipse会有提示,不能只能生成R文件。
应用程序资源匹配算法
各分辨率资源查找优先级
1080P:
xxhdpi>xhdpi>nodpi>hdpi>mdpi
hdpi:
hdpi>xhdpi>xxhdpi>mdpi>nodpi
xhdpi:
xhdpi>xxhdpi>hdpi>nodpi>mdpi