转载自:http://blog.csdn.net/czhpxl007/article/details/48574013
由于市场上Android手机种类繁多,Android应用多分辨率适配工作必不可少。
一般来说,屏幕分配分为,屏幕尺寸,屏幕方向,屏幕像素密度。
(1)屏幕尺寸
屏幕尺寸是根据屏幕大小进行匹配,例如small,normal,large,xlarge等等这一类匹配目前已经很少使用。
(2)屏幕方向
屏幕方向分为port竖屏和land横屏两种,通常开发时如果支持横屏显示,都会另写一套横向的布局文件。
(3)屏幕像素密度
屏幕像素密度指单位长度屏幕显示的像素,即常说的dpi(dots per inch),每英寸点数。密度越高显示画面就越清晰。
Android根据像素密度按区间范围分成几种:
密度区间 | ldpi | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi |
---|---|---|---|---|---|---|
dpi | 120 | 160 | 240 | 320 | 480 | 640 |
1dp对应像素数 | 0.75 | 1.0 | 1.5 | 2.0 | 3.0 | 4.0 |
当新建一个Android工程时,在res目录下可以看到drawable-xxx目录,就是对应不同像素密度的资源。系统会优先从该目录中寻找图片,如果找不到会从其他目录寻找。因此对应不同密度设备,我们需要为其准备不同画质的图片,以便获得更好的效果。
Android将mdpi像素作为基准线进行匹配,dp与px的换算关系如下,
px= dp * (dpi / 160 )
官方建议使用dp作为布局单位,这样不同的dpi设备上,换算出来的px也会相应的自适应。
为了更清楚地看清不同dpi机型上的px的换算规律,做了以下实验。
测试机型:
(1) 320dpi机型 A
(2) 160dpi机型 B
测试图片:
一张48×48的图片分别存放在drawable,drawable-mdpi,drawable-hdpi目录下,图片名称分别为
test1.png,test2.png,test3.png。
实验结果:
机型A上面显示效果,
test1.png 显示大小为 96×96像素
test2.png 显示大小为 96×96像素
test3.png 显示大小为 64×64像素
机型B上面显示效果,
test1.png 显示大小为 48×48像素
test2.png 显示大小为 48×48像素
test3.png 显示大小为 32×32像素
实验结论:
通过如上实验,我们知道一张图片实际显示大小与机型dpi和drawable文件夹dpi均相关。
手机显示像素 = 图片实际像素尺寸 × 机型DPI / 所在资源目录DPI
例如,在320dpi的机型上,将48×48像素的图片放入drawable-hdpi目录,该图片实际显示像素 = 48* 320/ 240 = 64像素。
所以为了获得更好的显示效果,每种dpi分辨率的机型,均需要搭配一张对应尺寸图片,以防止被缩小或者拉大。