写点什么

安卓屏幕完美适配方案,组件化与插件化的差别在哪里

用户头像
Android架构
关注
发布于: 23 小时前

[](

)2、分辨率:

[](

)手机在横向、纵向上的像素点数总和,一般描述成 宽*高 ,

[](

)即横向像素点个数*纵向像素点个数。



[](

)3、屏幕尺寸(in):

[](

)手机对角线的物理尺寸,单位 英寸(inch),一英寸大约 2.54cm,常见的尺寸有 4.7 寸、5 寸、5.5 寸、6 寸



[](

)4、屏幕像素密度(dpi):

[](

)每英寸长度上像素点个数。

[](

)例如每英寸内有 160 个像素点,则其像素密度为 160dpi。

[](

)公式:?像素密度=像素/尺寸 (dpi=px/in)



[](

)5、标准屏幕像素密度(mdpi):

[](

)每英寸长度上还有 160 个像素点,即称为标准屏幕像素密度(mdpi)。



[](

)6、像素密度等级:

[](

)手机真实像素密度与标准屏幕像素密度(160dpi)的比值。官方给出的 0.75、1、1.5、2、3、4,即对应 120dpi、160dpi、240dpi、320dpi、480dpi、640dpi。



[](

)7、密度无关像素(dp):

[](

)density-independent pixel,叫 dp 或 dip,与终端上的实际物理像素点无关。可以保证在不同屏幕像素密度的设备上显示相同的效果,是安卓特有的长度单位。



[](

)8、独立比例像素(sp):

[](

)scale-independent pixel,叫 sp 或 sip,字体大小专用单位,可根据字体大小首选项进行缩放;

[](

)推荐使用 12sp、14sp、18sp、22sp 作为字体大小,不推荐使用奇数和小数,容易造成精度丢失,12sp 以下字体太小。



[](

)9、尺寸、像素、像素密度关系:




[](

)10、px 与 dp 关系:

[](

)像素=dp*像素密度等级,即 px=dp*(dpi/160)




[](


)三、对哪些设备适配



注意进行 Android 设备的屏幕适配操作,不是单单对屏幕尺寸多样的各种设备进行的适配,在诸多的物理尺寸的背后是屏幕的分辨率,现在市面上占比最多的六种分辨率:480*800、320*480、480*854、540*960、720*1280、1080*1920。在日常适配中只要做好对这几个设备的适配,就能很好的适配其他机型。但是在这几种分辨率的背后存在的更为根本的数据是设备的屏幕像素密度。在 Google 文档中对于屏幕的像素密度进行了几种规定!

[](

)另外也需注意对安卓平板、安卓电视等大尺寸、超大尺寸设备的适配。



?





[](


)四、如何适配



[](

)1、适配误区

[](

)在进行适配的时候,人们总是关注于:代码、Layout、Dimens、图片、权重,这几种适配方式并不是屏幕适配的全部方案,除此之外还存在多种小细节来实现屏幕适配。

[](

)如何理解使用 dp 为单位进行适配?:


[](

)但是,使用密度无关像素(dp)也不能做到适配所有屏幕!



[](

)2、造成误差原因

在长期的 Android 发展过程中,由于 Android 设备的增多,Google 制定的屏幕密度标准(mdpi、hdpi、ldpi 等),在众多厂家的生产过程中,已经被打破,人们没有生产数完全符合屏幕密度标准的 Android 设备,对于真实手机的屏幕密度值,是在 Google 标准的周围浮动变化的,但是不乏存在一些厂商生产的设备偏离 Google 的屏幕密度标准比较大,这个时候再使用 dp 作为单位就不能完完全全的完成适配操作!(dp 只有在大家标准统一的情况下才有更好的发展)

[](

)在所有计算公式中存在误差:在计算真实像素密度时运用了开方运算和除法运算,导致所得结果存在误差。

[](

)理论计算造成的误差:

[](

)在计算对角线上像素点个数时,我们使用勾股定理计算得出,但实则存在误差:


  • 若将像素长度当做 1,分辨率指的是横纵向上的 1 的个数,计算记过表示的是对角线上有多少个 1,但理论上对角线上 根号 2 的个数才是像素点的个数!

  • 屏幕对角线并不会和像素对角线重合,使计算结果存在误差。?




[](

)3、ldpi、mdpi、hdpi、xhdpi、xxhdpi 的使用


官方截图:?



?




[](

)4、使用 wrap_content、match_parent、权重

[](

)要确保布局的灵活性并适应各种尺寸的屏幕,应使用 “wrap_content” 、“match_parent”和权重控制某些视图组件的宽度和高度。

使用 “wrap_content”,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 “match_parent”(在低于 API 级别 8 的级别中称为 “fill_parent”)则会展开组件以匹配其父视图的尺寸。

[](

)如果使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬编码的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间。此方法可让布局正确适应各种屏幕尺寸和屏幕方向。



[](

)5、使用相对布局,不要使用绝对布局

[](

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

[](

)关于布局的使用应该具体情况具体分析,在进行电视机顶盒的开发中就是使用的是绝对布局。



[](

)6、使用限定符进行适配操作

[](

)使用尺寸限定符——large

[](

)使用最小宽度限定符——swdp

[](

)使用屏幕方向限定符



[](

)7、多套 layout 适配

[](

)res/values/layouts.xml:

[](

)res/values-sw600dp-land/layouts.xml:

[](

)res/values-sw600dp-port/layouts.xml:

[](

)res/values-large-land/layouts.xml:

[](

)res/values-large-port/layouts.xml:



[](

)8、使用自动拉伸位图

[](

)支持各种屏幕尺寸通常意味着您的图片资源还必须能适应各种尺寸。例如,无论要应用到什么形状的按钮上,按钮背景都必须能适应。

如果在可以更改尺寸的组件上使用了简单的图片,您很快就会发现显示效果多少有些不太理想,因为系统会在运行时平均地拉伸或收缩您的图片。解决方法为使用自动拉伸位图,这是一种格式特殊的 PNG 文件,其中会指明可以拉伸以及不可以拉伸的区域。

[](

).9 的制作,实际上就是在原图片上添加 1px 的边界,然后按照我们的需求,把对应的位置设置成黑色线,系统就会根据我们的实际需求进行拉伸。



[](

)9、普通图片处理


稍后会详细介绍。



[](

)10、dimens 使用



《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码

如上图,我将市面上各分辨率下的屏幕尺寸,取了平均数,算出对应的真实的屏幕像素密度,与理论要求的屏幕像素密度作了对比,比值在倒数第二列。发现:(干货要来了!)真实像素密度与理论像素密度的比值大致分为两类,取其平均数,一类在 1.15 左右,另一类则在 0.89 左右。巧了,它们两类正好各自对应 w320dp 和 w360dp 的宽度限定符!所以,dimens 只需写两套即可(values-w320dp、values-w360dp),其 name 与真实数值的比值就是刚刚我们算出的两个平均数!?以后我们就不需要对应各种分辨率写多套 dimens 了,两套 dimens 即可。




[](


)五、图片处理

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
安卓屏幕完美适配方案,组件化与插件化的差别在哪里