android适配基础:
屏幕分辨率:分辨率就是屏幕的横纵像素点,单位是PX 1px=1像素点。一般是高宽,比如1280800 代表竖向的像素点是1280,横是800。
屏幕尺寸:屏幕对角线的长度,单位是英寸 1英寸=2.54厘米。
屏幕像素密度:指每英寸的像素点,单位DPI。屏幕像素密度和屏幕尺寸和分辨率有关。
换算规则:
- 160dpi下 1dp=1px
- 240dpi下 1dp=1.5px 。
- 320就是1dp=2px
- 160 1倍图
- 240 1.5倍图
- 320 2倍图
android适配可以分成三种
** 1.图片大小的适配**
2.字体大小的适配
3.布局大小的适配
下面是官网给的倍数图和对应的dpi
1.图片大小适配
google为我们提供了drawable文件夹里面有
drawalbe-mdpi 120dp~160dp
drawalbe-hdpi 160dp~240dp
drawalbe-xhdpi 240dp~320dp
drawalbe-xxhdpi 320dp~480dp
drawalbe-xxxhdpi 480dp~640dp
mipmap-hdpi
它只是用来放启动图标的
它的好处就是,你只用放一个mipmap图标,它就会给你各种版本(比如平板,手机)的apk自动生成相应分辨率的图标,以节约空间。
匹配规则:
- 如果当前屏幕密度是160dp那么android程序就会去找 drawable-hdpi里面的图片文件,每个文件对应一个dpi的范围。
- 如果当在对应的文件夹中没有匹配到资源,那么程序优先回去更高dpi文件中去匹配,如果没有更高的dpi文件了,那就匹配drawable-nodpi,如果也找不到那么就会去当前级别以下的,低级别的dpi中找到为止。
. 适配尽量适配高分辨率的图片,这样可以节省内容开销。如果当前是xhdpi级别,匹配的资源没有,如果找到的是一个低级别的dpi。那就会导致图片放大,损耗内存开销。
2.字体大小
sp
3.布局大小的适配
能用权重的就是用权重,这样可以达到100%适配。尽量少用dp去写死布局的大小,这样有可能会出现在不同的dpi手机中出现不小不是很统一的情况,原因是你比如写的dp的产出是UI根据 dpi160 1280*800的分辨率上标注的,如果运行到dpi320的手机上那就可能出现换算结果不一致的问题,所以需要单独针对这个分辨率去标注一下。
最小宽度限定符values-sw820dp
这里的sw代表smallwidth的意思,当你所有屏幕的最小宽度都大于600dp时,屏幕就会自动到带sw600dp后缀的资源文件里去寻找相关资源文件,
这里的最小宽度是指屏幕宽高的较小值,每个屏幕都是固定的,不会随着屏幕横向纵向改变而改变。
**values-w820dp **
意思就是最小width xxxdp就会去匹配里面的的资源文件
layout-w600dp 带这样后缀的资源文件的资源文件制定了屏幕宽度的大于Ndp的情况下使用该资源文件,但它和sw<N>dp不同的是,
当屏幕横向纵向切换时,屏幕的宽度是变化的,以变化后的宽度来与N相比,看是否使用此资源文件下的资源。
layout-h600dp
这个后缀的使用方式和w<N>dp一样,随着屏幕横纵向的变化,屏幕高度也会变化,根据变化后的高度值来判断是否使用h<N>dp ,但这种方式很少使用,因为屏幕在纵向上通常能够滚动导致长度变化,不像宽度那样基本固定,因为这个方法灵活性不是很好,google官方文档建议尽量少使用这种方式。
** values-large Android3.2之前的平板布局**
values-sw600dp-land 横屏
values-sw600dp-port 竖屏