前言
理解本文,首先需要屏幕适配基础
最小宽度概念
屏幕的宽,所需的最小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
若有收获,就点个赞吧