今日头条屏幕适配方案中对横竖屏切换的优化
================
今日头条屏幕适配方案 & 横竖屏切换优化
将以下依赖项添加到下的中
在中(注意的位置)
在中(注意的位置)
关于今日头条是配方案的优缺点,相关文章的内容的已经比较成熟这里也就不再赘述了,这里主要是解决今日头条屏幕适配方案落地研究一文评论中横竖屏切换时的一个issue.
相关文章:
一种极低成本的Android屏幕适配方式(字节跳动技术团队)
今日头条屏幕适配方案落地研究(codeGoogle)
横竖屏的问题一直是Android开发者相对不是太在乎的问题,因为生态上来说Android的平板本身就不是很成功,手机上也可以通过来禁止使用横屏模式,即使需要也可以使用资源文件夹解决。
在今日头条适配方案中带来了一个优势——“已知宽度“,以固定的设计宽度为例,如果想要一个在屏幕正中间的Win10 Logo(伪),只需要这样就可以了:
效果图(竖屏)
但此时横屏是这样的:
效果图(横屏)
此时横屏出现了两个问题,正方形显示不完整与正方形错位。
横屏错位的原因很简单,解决前先看看这个程序在Android 10下的运行效果。
效果图(横屏/Android 10)
所以解决方式很简单升级Android 10就可以了,所以原因很简单就是虚拟键的原因。
解决方法很简单:
方法1:加入对的判定即可,为了避免不时之需同时加入对的判定。
方法2:根据进行自动判断。
(与的计算与排坑参见Android常用工具类(基于Kotlin)与相关源码。)
关于正方形显示不完整的问题,其实前面也留有伏笔——“已知宽度”,正是这个优势带来了横屏的显示问题。由于布局文件中仅仅采用具体值设置大小,而同时这个值是基于设计宽度的。
解决方法一样很简单:
方法1:设置基准边(e.g.基于宽度、基于高度、基于短边、基于长边),为基准边设置设计尺寸。
需要注意,以高度为基准边时的高度问题(不时之需回收)
(与的状态判断参见Android常用工具类(基于Kotlin)与相关源码。)
方法2:以宽度为基准边,为横屏与竖屏设置不同的设计宽度。(因为与宽度无关,所以可以移除的尺寸判定)
(其中部分方法的实现参阅Android常用工具类(基于Kotlin))
DensityUtil.kt
Density.java