(一)今日头条屏幕适配方案
总的来说它是通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值,这样就解决了所有的适配问题。
其适配方案的核心原理在于,根据以下公式算出 density (density 的意思就是 1 dp 占当前设备多少像素)
当前设备屏幕总宽度(单位为像素)/ 设计图总宽度(单位为 dp) = density
屏幕总宽度就是 屏幕宽与高相比较最小的那个 例如: 屏幕像素为 1920 * 1080 则屏幕总宽度为 1080
详细介绍:
https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA
https://www.jianshu.com/p/55e0fca23b4f
另外推荐一个根据今日头条技术封装好的屏幕适配框架:
AndroidAutoSize 框架
使用:
一.
implementation 'me.jessyan:autosize:1.0.0'
使用:
在 AndroidManifest 中填写全局设计图尺寸 (单位 dp),如果使用副单位,则可以直接填写像素尺寸,不需要再将像素转化为 dp
<manifest>
<application>
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
</application>
</manifest>
更多详细用于查看 demo-subunits
(二)smallestWidth方式适配
以下内容来自 https://www.jianshu.com/p/2aded8bb6ede 我只是将主要的罗列出来
什么是 smallestWidth
smallestWidth 翻译为中文的意思就是 最小宽度,那这个 最小宽度 是什么意思呢?
系统会根据当前设备屏幕的 最小宽度 来匹配 values-swdp,为什么不是根据 宽度 来匹配,而要加上 最小 这两个字呢?
这就要说到,移动设备都是允许屏幕可以旋转的,当屏幕旋转时,屏幕的高宽就会互换,加上 最小 这两个字,是因为这个方案是不区分屏幕方向的,它只会把屏幕的高度和宽度中值最小的一方认为是 最小宽度,这个 最小宽度 是根据屏幕来定的,是固定不变的,意思是不管您怎么旋转屏幕,只要这个屏幕的高度大于宽度,那系统就只会认定宽度的值为 最小宽度,反之如果屏幕的宽度大于高度,那系统就会认定屏幕的高度的值为 最小宽度