有几个概念以及相关公式先理解下:
1、dp:device independent pixels(设备独立像素),是像素和密度的比
dp = px / density
2、dpi(dot per inch每英寸的点数)和ppi相等,是屏幕对角线的像素数和屏幕尺寸的比例
dpi = ppi = (√(screenHeight^2 + screenWidth^2)) / 屏幕大小(inch)
3、密度是dpi和160的比例
density = dpi / 160
4、英寸是相许和dpi或ppi的比例
inch = px / dpi = px / ppi
适配,按自己理解的只有以下两种情况(有不同见解可以补充)
先看第一种情况(屏幕宽度相同,分辨率不同)
1、一款分辨率是480 * 800的手机,宽 480,高800,高度一般会受虚拟键等的影响,但宽度是一定的,以宽度为标准,所以,一般都是按宽度进行区分
160dpi 屏幕宽度为3 inch,dp为480dp
2、另外一款分辨率 720 * 1280的手机宽 720,高1280
240dpi 屏幕宽度为3 inch,dp同样为480dp
所以,两款手机屏幕大小一样,但是分辨率不同,因此,相同的布局文件相同的dimens文件完全适用于这两款手机
但是图片呢,相同的图片,分别放在drawable-mdpi和drawable-hdpi,
在第一款手机上显示正常,在第二款手机上却会显得小,所以,高密度的图片应该做大
(注:如果只有一套图,比如放在drawable-mdpi中,图片显示大小是相同的)
第二种情况(分辨率相同,屏幕宽度不同)
1、一款分辨率 720 * 1280的手机宽 720,高1280
160dpi 屏幕宽度为4.5 inch,dp为720dp
2、一款分辨率 720 * 1280的手机宽 720,高1280
240dpi 屏幕宽度为3 inch,dp为480dp
借上一种情况结果,图片会做不同尺寸,现在布局和尺寸可能会不同了
所以,布局和尺寸需要进行适配,如果不同大小的屏幕需要不同布局。
例如第一款手机,可能是平板大小了,布局和手机不同,layout不能适用于平板,
因此,需要重新建立文件夹重新布局例如 layout-sw720dp
第二款手机,布局也不同,需要建立layout-sw480dp
对于不同屏幕尺寸,view的尺寸可能也会有不同
在values中会有dimen.xml文件,因此尺寸也需要适配
可能会建立如下目录values-sw720dp、values-sw480dp
sw720dp、sw480dp的格式如下:
sw<N>dp (smallestWidth)屏幕横竖屏切换,最小屏幕宽度不会发生变化
w<N>dp 屏幕横竖屏切换,屏幕宽度会根据横竖屏发生变化
其中的N指的是屏幕宽度,单位dp,720px不同密度,宽度不同,所以会有不同目录
这种使用方式是3.2才开始使用,之前是使用small、normal、large、xlarge这种
目录名称举例:
layout-sw720dp、layout-sw480dp、layout-sw320dp、layout-large、values-sw480dp等
总结,就目前自己了解的适配就这两种情况
1、屏幕宽度相同,分辨率不同(适配不同密度图片、不同密度的样式、主题等)
2、分辨率相同,屏幕宽度不同(适配不同布局、适配不同尺寸)
另外,从android生成的目录结构来看,应该还有第三种,适配不同版本
如values目录会有values-v11、values-v14,里边只有style.xml,
是不同的主题,可能是不同版本的android,主题有新增的,想在新版本使用新ui界面,做的适配,未经证实,仅是猜测。
推荐以下文档,研读:
http://developer.android.com/guide/practices/screens_support.html
http://developer.android.com/training/multiscreen/index.html