Android 屏幕适配问题分析
一、屏幕分辨率、大小及相关单位介绍
Android categorizes device screens using two general properties: size and density.There are four generalized sizes: small, normal, large, xlarge;And four generalized densities: low (ldpi 0.75), medium (mdpi 1.0 baseline), high (hdpi 1.5), extra high (xhdpi 2.0). To declare different layouts and bitmaps you'd like to use for different screens, you must place these alternative resources in separate directories, similar to how you do for different language strings.
This means that if you generate a 200x200 image for xhdpi devices, you should generate the same resource in 150x150 for hdpi, 100x100 for mdpi, and 75x75 for ldpi devices.
屏幕大小,指的是屏幕对角线的长度,通常使用“寸”来度量,如:4.5寸屏幕等等。
分辨率,指屏幕的像素点个数,如:720x1280,指宽有720个像素点,而高有1280个像素点。
PPI,指每英寸像素个数pixels per inch,又被称为DPI(Dots Per Inch),是由对角线的像素点数除以屏幕的大小,由此得到像素密度(或者称为:屏幕密度)。
每个厂商的Android手机具有不同大小尺寸和像素密度的屏幕。Android系统如果要精确到每种DPI的屏幕,那基本上是不可能的。系统定义了几个标准的DPI值,作为手机的固定DPI。
其中包括:密度值(也就是DPI)和屏幕分辨率。
独立像素密度:dp,Android系统使用mdpi即密度值为160的屏幕作为标准,在这种屏幕上1dp=1px,其他屏幕可以通过比例进行换算。(也就是说:1英寸占用160个像素,对应是160px)
密度值为240的屏幕中,1dp=?px
密度值为240,也就是:1英寸是240px,此时相对于160密度值而言,像素直径小。
mdpi:100dp=100px 160dp=160px=1英寸
要实现密度无关像素,也就是1dp的长度和屏幕密度无关,即要实现1dp --> N*px的比例转换关系。
密度值越大,像素直径越小;对应的,1dp获得的px数越多。
mdpi:1dp = 1px --> 160dp = 160px = 1英寸
hdpi:1dp = 1.5px --> 160dp = (1/1.5)*240dp = 240px = 1英寸 --> 1dp = 1.5px
密度值越高的屏幕,显示的效果就越精细。宽是2英寸长是3英寸的手机屏幕,若分辨率是320*480,密度就是160dpi;若分辨率是640*960,则密度就是320dpi。
屏幕密度越大,1dp对应的像素数目越多.
dp:长度单位,与具体屏幕密度无关,显示的时候根据具体平台屏幕密度的不同最终转换为相应的像素长度,具体转换规则是: 1dp = (目标屏幕密度/标准密度)*px,标准密度为160dpi,例如,1dp长度在密度为160dpi的平台表示一个像素的长度,而在240dpi的平台则表示1.5个像素的长度.
参考:
http://www.cnblogs.com/yaozhongxiao/archive/2014/07/14/3842908.html
http://www.jb51.net/article/33238.htm
二、动态加载布局——根据设备大小加载对应布局
特制化res目录,使用上述限定符:small、normal、large、xlarge,为新建的layout目录命名:layout-large...实现动态加载布局的功能。那些屏幕被认定为是:large的,会自动加载large-layout目录中的布局文件。
使用最小宽度限定符对屏幕的宽度指定一个最小值(以dp为单位),以该值作为临界值,小于该值得加载一个布局,其他的加载另一个布局。在res目录下,新建layout-sw600dp目录:当程序运行在屏幕宽度大于600dp的设备上时,会加载layout-sw600dp中的布局文件,若小于时默认加载layout目录中的布局文件。
三、分辨率适配解决方案
http://blog.csdn.net/z343929897/article/details/27337537
http://www.cnblogs.com/maxinliang/p/3170711.html
http://www.cnblogs.com/zealotrouge/archive/2012/11/23/2784774.html