1.目录对应设备关系
ldpi: 屏幕密度为120的手机设备
mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px)
hdpi: 屏幕密度为240的手机设备
xhdpi: 屏幕密度为320的手机设备
xxhdpi:屏幕密度为480的手机设备
android默认的low=120 ;Medium =160; High = 240
2. 程序启动图标:
LDPI (Low Density Screen,120 DPI),其图标大小为 36 x 36 px。
MDPI (Medium Density Screen, 160 DPI),其图标大小为 48 x 48 px。
HDPI (High Density Screen, 240 DPI),其图标大小为 72 x 72 px。
xhdpi (Extra-high density screen, 320 DPI),其图标大小为 96 x 96 px。
xxhdpi(xx-high density screen, 480 DPI),其图标大小为144 x 144 px。
3.桌面ICON的尺寸:5个尺寸的ICON,分别对应资源目录res下以drawable_开头的几个文件夹内。
36*36 ——->drawable_ldpi目录下
48*48 ——->drawable_mdpi目录下
72*72 ——->drawable_hdpi目录下
96*96 ——->drawable_xhdpi目录下
144*144——>drawable_xxhdpi目录下
4.图片尺寸:和ICON对应,分别对应资源目录res下以drawable_开头的几个文件夹内。
320*240 ——–>drawable_ldpi目录下
480*320 ——–>drawable_mdpi目录下
800*480 ——–>drawable_hdpi目录下
1280*720 ——->drawable_xhdpi目录下
1920*1080 ——>drawable_xxhdpi目录下
5.注意
-
据px = dip * density / 160,则当屏幕密度为160时,px = dip
-
TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知Android默认使用sp作为字号单位。将dip作为其他元素的单位。
-
图片放在drawable中,等同于放在drawable-mdpi中,原因为:drawable目录不具有屏幕密度特性,所以采用基准值,即mdpi
-
图片放在某个特定drawable中,比如drawable-hdpi,如果设备的屏幕密度高于当前drawable目录所代表的密度,则图片会被放大,否则会被缩小,放大或缩小比例 = 设备屏幕密度 / drawable目录所代表的屏幕密度
-
为了更全面的适配所有设备,我们应该提供一套针对主流屏幕密度的图片(目前为hdpi或xhdpi),其他密度通过系统自动缩放得到图片
-
import android.content.Context; public class DimenUtils { public static int spTopx(Context context, float spValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } public static int pxTosp(Context context, float pxValue) { float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } public static int dipTopx(Context context, int dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } public static int pxTodip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } }