Android屏幕适配那些事儿

来源:互联网 发布:mac ftpserver工具 编辑:程序博客网 时间:2024/05/23 10:28

基本概念

屏幕尺寸、屏幕分辨率、屏幕像素密度

屏幕适配的原因:匹配设备的不同尺寸,不同分辨率,不同像素密度
1.屏幕尺寸:指设备对角线的长度,单位:英寸(inch),1英寸=2.54厘米
2.屏幕分辨率:指在设备横纵方向上的像素点数,单位是px(pixel),1px=1个像素点,一般写法是:纵向像素点数*横向像素点数,例:1280*700
3.屏幕像素密度:每英寸屏幕上的像素点数,单位:dpi(dot per inch),屏幕像素密度和屏幕尺寸、分辨率有关,尺寸越小,分辨率越高,像素密度就越大

px、dpi、dip、dp、sp

1.px:像素,屏幕分辨率的单位,一般UI设计、Android原生API都会以px作为计量单位,比如获取到的屏幕宽高
2.dpi:屏幕像素密度
3.dip:Density Independent Pixel,密度无关像素,1dip = 1dp
dpi是屏幕像素密度,假如一英寸里面有160个像素,这个屏幕的像素密度就是160dpi,那么在这种情况下,dp和px如何换算呢?
Android规定以160dpi像素密度为基准,在这种屏幕像素密度下,1dp=1px
若以320dpi像素密度为基准,在这种屏幕像素密度下,1dp=2px
dip和具体像素值的对应公式是dip/pixel=dpi值/160,dip=pixel*(dpi值/160)
4.sp:Scale Independent pixel,与dp类似,可根据文字大小首选项对文字大小进行放缩,是设置文字大小的御用单位

mdpi、hdpi、xdpi、xxdpi

其实之前还有个ldpi,但是随着移动设备配置的不断升级,这个像素密度的设备已经很罕见了,所在现在适配时不需考虑。
这几个是用来修饰drawable文件夹,values文件夹,用来区分不同像素下的图片和dimens值

名称 像素密度单位 图标尺寸(举例) mdpi 120dpi-160dpi 48x48 px hdpi 160dpi-240dpi 72x72 px xdpi 240dpi-320dpi 96x96 px xxdpi 320dpi-480dpi 164x164 px xxxdpi 480dpi-640dpi 192x192 px

图标在这五种主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)按照 2:3:4:6:8 的比例进行缩放。例如,一个启动图标的尺寸为48x48 dp,这表示在 MDPI 的屏幕上其实际尺寸应为 48x48 px,在 HDPI 的屏幕上其实际大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其实际大小是 MDPI 的 2 倍 (96x96 px),依此类推。

解决方法

使用wrap_content、match_parent、weight

使用“wrap_content” 和 “match_parent” 尺寸值而不是具体数字的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间,此方法可让布局正确适应各种屏幕尺寸和屏幕方向。
weignt特别说明下:
layout_weight是线性布局的一个独特的属性,如果View设置了该属性并且有效,则计算方法:View宽度=原有宽度(layout_width)+剩余空间占比
举例:
这里写图片描述
解释:在上面的代码中,每个Button的宽度都是match_parent,假设屏幕宽度为L,那么每个Button的宽度也应该都为L,剩余宽度就等于L-(L+L)= -L。
Button1的weight=1,剩余宽度占比为1/(1+2)= 1/3,所以最终宽度为L+1/3*(-L)=2/3L,Button2的计算类似,最终宽度为L+2/3(-L)=1/3L。
但,在真正用的时候,我们都是设置某一个属性为0dp,然后按照权重计算所占百分比。

使用相对布局,禁用绝对布局

在开发中,我们大部分时候使用的都是线性布局、相对布局和帧布局,绝对布局由于适配性极差,所以极少使用。

使用限定符

1.尺寸限定符:res/layout/main.xml、res/layout-large/main.xml
布局名称目录中的 large 限定符,系统会在较大屏幕(例如 7 英寸或更大的平板电脑)的设备上选择此布局。系统会在较小的屏幕上选择其他布局(无限定符)。
2.最小宽度限定符:res/layout/main.xml、res/layout-sw600dp/main.xml
对于最小宽度大于等于 600 dp 的设备,系统会选择 layout-sw600dp/main.xml布局,否则系统就会选择 layout/main.xml布局。
3.使用屏幕方向限定符:res/layout/main.xml、res/layout-land/main.xml

使用自动拉伸位图(.9png图片)

注意:左上边代表拉伸区域,右下边代表padding box,就是间隔区域。

支持各种屏幕尺寸通常意味着图片资源还必须能适应各种尺寸。例如,无论要应用到什么形状的按钮上,按钮背景都必须能适应。
如果在可以更改尺寸的组件上使用了简单的图片,您很快就会发现显示效果多少有些不太理想,因为系统会在运行时平均地拉伸或收缩您的图片。解决方法为使用自动拉伸位图,这是一种格式特殊的 PNG 文件,其中会指明可以拉伸以及不可以拉伸的区域。
.9的制作,实际上就是在原图片上添加1px的边界,然后按照我们的需求,把对应的位置设置成黑色线,系统就会根据我们的实际需求进行拉伸。

支持各种屏幕密度(使用非密度制约像素)

使用 dp(而非 px)指定两个视图间的间距,使用 sp 指定文字大小

由于各种屏幕的像素密度都有所不同,因此相同数量的像素在不同设备上的实际大小也有所差异,这样使用像素定义布局尺寸就会产生问题。因此,请务必使用 dp 或 sp 单位指定尺寸。dp 是一种非密度制约像素,其尺寸与 160 dpi 像素的实际尺寸相同。sp 也是一种基本单位,但它可根据用户的偏好文字大小进行调(即尺度独立性像素),因此我们应将该测量单位用于定义文字大小。

0 0