1、屏幕适配的重要概念
Android机型众多,屏幕适配也比较麻烦。
1、主要是屏幕尺寸,分辨率,像素密度
屏幕尺寸:对角线的长度,1英寸=2.54厘米。比如说5英寸
屏幕分辨率(px):横纵像素点个数。单位px,1px就是一个像素点。例如现在手机1920*1080(纵向1920px*横向1080px)
像素密度(dpi):每英寸上的像素点数(dot per inch)屏幕像素密度与屏幕尺寸和分辨率关。
2、像素密度(dpi)如何计算
上面为例5英寸手机,1920*1080分辨率下,dpi是多少呢
dpi=\sqrt{1920^2+1080^2}/5≈441
2、开发中常用的几个概念
px:android中包括系统都是用的这个计量单位,比如获取一个button的高,返回的就是px;
dp,dip(Density Independent Pixels):密度无关像素。
指的是逻辑密度计算单位,dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)
sp(Scale-Independent Pixels):可以根据文字大小进行放缩。Google推荐使用偶数单位12,14,18,22做为首选大小,最好不要使用基数或者小数做为单位,可能造成精度丢失。
3、mdpi,hdpi,xdpi,xxdpi
4、适配手机尺寸问题
- 布局上选择,合理的使用布局
- 使用wrap_content,match_parent,weight
- 布局别名的使用:为了适应手机和平板之间的适配问题,并且平板可能有两套布局,使用布局别名,把平板的两套布局使用一个。进行统一管理
- 方向限定符:在横竖屏切换的时候加载不同的布局。
- 9patch图片的使用。
5、屏幕密度的问题
- sp,dp的使用
6、图片的适配问题
Android图片选择策略
上面说到, 如果屏幕所对应的文件夹没有要找的图片,怎么办。这是很常见的,我们开发项目时一般不会去为每一个级别的屏幕去切一套图片。那样做只会让apk很大。所以一般性的图片我们只切一两个典型密度屏幕的图片。但是apk是有可能会运行在从ldpi到xxhdpi的各种级别的手机上。这个时候就需要根据一定的策略去寻找图片了。
Android系统寻找图片的步骤是这样的:
1, 去屏幕密度对应的目录去找。如果找到就拿来用。
2, 如果没找到,就去比这个密度高一级的目录里面去找,如果找到就拿来用。
3, 如果没找到就继续往上找。以此类推。
4, 如果到了xxhdpi目录还没有找到的话,就会去比自身屏幕密度低一级的目录去找,如果低一级的目录>=hdpi,找到了就拿来用。
5, 如果没找到, 就去mdpi目录去找, 如果找到了,就拿来用。
6, 如果没找到,就去默认的drawble目录里去找, 如果找到了就拿来用。
7 ,如果没找到,再去最低的ldpi目录里去找。如果找到了,就拿来用。
8, 如果没找到, 那就是没找到了, 图片无法显示。(不过一般不会出现这种现象,因为如果每个目录都没有这个图片的话,你是编译不过的)
这里有两点需要注意:
① 首先会去比自己密度高的目录里去找,这是因为因为系统相信,你在密度更高的目录里会放置分辨率更大的图片,这样的话这个图片会被缩小,但同时显示效果不会有损失,但是如果优先去低一级别的目录去找的话, 找到的图片就会被放大,这样的话这个图片就会被拉扯模糊了。
e.g. 同一张图片,你在mdpi和xxhdpi目录各放了一份, 这个应用你现在运行在hdpi的手机上, 那应用会选择哪张图片呢。答案是xxhdpi目录里的。即便hdpi离mdpi更近一点!
②,如果在mdpi里找不到是不会直接去ldpi里找的, 而是先去默认的drawble目录里找,这是drawble目录和drawble-mdpi是一个级别的。
参考博客
http://blog.csdn.net/xiebudong/article/details/37040263