缺省资源是为了让程序在美测试过的设备上不崩溃
候选资源是为了更好的用户体验,系统运行时自动挑选最合适的资源使用。
选取和设备匹配的候选资源除了根据一些固定不变的参数,如屏幕大小,有无键盘等,还会考虑很多的动态的系统属性,如屏幕方向,当前语言,白天还是黑夜等。
Android 在系统配置中定义一个scale值,sp和dp的换算关系时sp等于dp乘以scale。通常scale是1。Android系统允许用户定义文字的尺寸,设置完成后scale的值就会发生变化。最后的效果是,在UI布局不变的情况下,字体会变化。
Android 中定义的资源类型:
布局layout: UI布局的xml文件,通过R.layout类存取。
图片 drawable : 各种格式(.png .9.png .gif .jpg)的图片资源或xml定义的绘图资源。通过R.drawable类存取。
动画 anim: 通过xml定义的控制动画的文件,通过R.anim类存取。
状态颜色列表 color state list: 定义控价不同状态的颜色组。通过R.color类存取。
菜单 menu: 定义应用的菜单项。通过R.menu类存取。
字符串 string: 定义应用中使用的字符串,通过R.string 、R.array和R.plurals类存取。
类型 style: 定义UI元素的外观和格式,通过R.style类存取。
bool: 定义bool类型的值,通过R.bool类存取。
color 定义16进制的颜色值,通过R.color类存取。
Dimmension: 定义一个带单位的维度值,通过R.dimen类存取。
ID:定义一个id。通过R.id类存取。
Integer :定义一个整型值,通过R.integer类存取。
Array: 定义一个数组,通过R.array存取。
Android 资源的制作:
assets:目录下还可以再建目录,没有限制,assets目录可以放任意文件,这些文件在编译过程中不会被改变,而是原封不动的打包进apk。
这个目录下保存的文件不能通过存取资源的方式在代码中访问到,访问这个目录下的文件更像是打开一个文件
AssetsManager am = getAssets();
InputStrream is = am.open("filepath");
res:
下面有个raw子目录,放在raw目录下的文件也不会被改动,但是raw目录下不能再建子目录。
访问raw目录下的资源的方式和访问其他的资源是一至的。
InputStream is = getResources().openRawResource(R.id.filename);
同时raw目录下的资源也能像其他资源一样有备选资源,能够被overlay目录中的资源覆盖掉。
animator:存放object动画的xml定义文件
anim:存放tween动画动的xml定义文件,属性动画的定义文件也可以放在这里。
color:存放状态颜色的xml定义文件。
drawable:存放图片文件 .png .9.png .jpg .gif和定义drawable的xml文件。
layout:存放用户界面的布局问价。
menu:存放菜单定义文件。
raw:存放任意不希望被android编译时改动的文件。
values:存放简单值定义的xml文件。
xml:存放任意的xml文件。这些文件可以通过Resource.getXML()在代码中打开。
Android 资源的使用:
应用程序编译后,会自动生成一个R.java文件,里面包含了所有应用定义的资源ID。
Java代码中使用资源
最简单的方式是直接传递ID。
如果希望直接获取资源,可以通过resource类来完成。Resource类的实例可以通过Context类的getResource()方法获得。Resource类中定义了大量的getXXX()方法,用来获取特定的资源。
XML文件中使用资源
在对资源XML文件中的属性赋值时可以引用另外的资源定义。
除了引用某种资源外,在xml文件中还可以直接引用style资源的属性定义。
使用公开和非公开资源:
普通应用可以使用系统的公开资源,非公开资源只能系统应用或Framework中的类使用。
如果要使用非公开资源,在java代码中要使用com.android.internal 的包名来引用。如果是在xml文件中引用未公开的资源,要在@后面加上*。
如果使用了非公开资源系统编译无法通过,要检查应用的Android.mk文件中是否有
LOCAL_SDK_VERSION := current
加上这一句,会导致系统编译时使用SDK,但是SDK中不包含非公开的资源,因此编译将失败。
图片资源的缩放:
drawable-nodpi:存放在这个目录下的图片装载进内存后,不会被缩放,所谓不缩放的意思是多少像素就是多少像素。
ldpi:120 如果希望图片的缩放效果最好,图片的尺寸必须是3的倍数。
mdpi:160如果希望图片的缩放效果最好,图片的尺寸必须是4的倍数。
hdpi: 240如果希望图片的缩放效果最好,图片的尺寸必须是6的倍数。
xhdpi: 320如果希望图片的缩放效果最好,图片的尺寸必须是8的倍数。