前言
首先声明一点这个并不是一个新的屏幕适配方案,其适配原理为SmallWidth,正如其名字一样,希望通过这个框架适配,让SmallWidth适配方案变得更加容易。
项目地址
屏幕适配的原理简述
2018年的时候今日头条公布的他们的屏幕适配方案,紧接着各位大佬也陆续发布了屏幕适配的相关文章,同时 JessYan 还发布了今日头条方案的适配框架,这些都极大地帮助android开发者能够更加容易的进行屏幕适配。在所有的屏幕适配方案中,公认比较好的屏幕适配方案有基于最小宽度 SmallWidth和 基于头条适配方案的 AndroidAutoSize。
我们都知道手机屏幕的显示是通过一个个像素来完成的,但是android并不推荐我们直接使用px来标记ui大小。因为不同的手机分辨率不同。相同的像素在越高的分辨率的手机上显示越小。
android推荐使用dp来进行屏幕适配。
那么什么是dp?
dp指的是设备独立像素,以dp为尺寸单位的控件,在不同分辨率和尺寸的手机上代表了不同的真实像素,比如在分辨率较低的手机中,可能1dp=1px,而在分辨率较高的手机中,可能1dp=2px,这样的话,一个96*96dp的控件,在不同的手机中就能表现出差不多的大小了。
dp与px的关系
我们都知道一个公式: px = dp(dpi/160) 系统都是通过这个来判断px和dp的数学关系,
那么这里又出现了一个问题,
dpi是什么呢?
dpi是像素密度,指的是在系统软件上指定的单位尺寸的像素数量,它往往是写在系统出厂配置文件的一个固定值。
dpi的计算方式:
image.png
系统的dp能够解决大部分的问题,但是由于手机生产厂家的不同,系统的dpi就有可能不同,为了解决宽度相同像素不同dpi手机的适配问题,我们需要用到屏幕适配方案。
SmallWidth适配方案
SmallWidth基于当前设备的宽度,从大到小一次查找最接近的dimen资源 进行使用。假设当前设备的宽度360dp 存在sw361dp,sw350dp。即使sw361dp和设备的宽度360dp接近。也会使用sw350dp的资源
SmallWodth是一种等比例适配方案,假设我们以360dp为设计宽度,那么在360dp的dimens中的 值该如何编写呢?在我们的设计中360dp能铺满全屏,那么在现在350dp也能铺满全屏。
即:如果 350中的dimen值