Smallest width 适配

383 阅读2分钟

前言

理解本文,首先需要屏幕适配基础

最小宽度概念

手机常见尺寸网站

屏幕的宽,所需的最小dp

1440X2560 5.5寸 的屏幕密度比值是标准160dpi的4倍

所以该屏幕的最小宽度sw=1440/4=360

适配的资源放在 : values-sw360dp 中

sw=屏幕的最窄的一面的所有像素值(不去掉可操作栏部分)/屏幕密度比值

当缺失sw资源时,会找最接近的小于该值得资源文件

原理

dpi=(1080x1080+1920x1920 )开平方/屏幕尺度

屏幕密度比值(density)= 屏幕密度/标准160(dpi) (屏幕密度比值一般是1倍、 2倍、 3倍、 3.5倍)

sw宽度=屏幕宽像素/屏幕密度比值

获取density:

/**
 * 获取屏幕密度
 */
fun getDpi(activity: AppCompatActivity): Float {
    val w = activity.window.windowManager
    val dm1 = DisplayMetrics()
    w.defaultDisplay.getMetrics(dm1)
    val density = dm1.density
    return density
}

生成一系列的values-swdp文件夹,当把项目运行到不同的设备上时候,系统会根据当前设置的最小宽度去匹配对应的文件夹中的对应的dimens文件,

如果系统根据当前屏幕最小宽度没有找到对应的文件夹,则会去找当前设备最小宽度相近的文件夹,即只会寻找小于或者等于当前设备最小宽度的文件夹

dimens.xml 值计算

把屏幕屏幕分成多少份(自定义)

例子:屏幕划分360份。

2560X1440 5.5寸的屏幕密度比值是标准160dpi的4倍(计算过程在基础篇中,也可上上面的手机常用尺寸网站中查看)

所以1440的最小宽度=1440/4=360dp,意思就是360dp可以填满该屏幕

适配的资源放在 : values-sw360dp 中,每个dp=1dp,

假如适配values-sw400dp,每个dp=400/360dp

SmallestWidth Dimens 插件

自动生成sw文件

插件名:SmallestWidth Dimens,可在AS插件中搜索安装

Tools就可以看到:

其中Design Width 表示把屏幕划分的多少份。

最大的份数的dp值,表示为填充屏幕宽所需dp

若有收获,就点个赞吧