接到需求后的一系列心理活动
- 卧槽,适配规则竟然这么复杂
- (经过一番计算后)没想到现在画UI还需要做数学题(结果后附)
- 能用布局文件实现这适配规则最好,尽量不要写代码来处理(希望能将逻辑内聚到布局里)
- (其实靠布局文件实现的话,后面看布局重新理解也是很困难的)
需求实施过程中的一系列问题求解
Q: 梳理一下规则
Q: 是否可以通过定义对应的布局文件
Q: 关于屏幕/应用显示区域大小
- 屏幕指物理屏幕的大小
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val screenSize = Point().apply { windowManager.defaultDisplay.getRealSize(this) }
Log.i(TAG, "screen=(W:${screenSize.x}, H:${screenSize.y})")
- 应用显示区域指应用可绘制的窗口大小
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val displaySize = Point().apply { windowManager.defaultDisplay.getSize(this) }
LogUtil.i(TAG, "display=(W:${displaySize.x}, H:${displaySize.y})")
- 物理屏幕的大小大于等于应用可绘制窗口的大小
- 物理屏幕大小包含:顶部状态栏、应用显示区域、底部导航栏
- 应用可绘制窗口大小包含:
Q: 通过获取屏幕大小/应用显示区域的大小,直接计算各部位的高度,直接配置?
A: 不建议。
一方面不论采用屏幕大小还是应用显示区域大小,进行计算,都无法完美的适配各种屏幕(?)。
另一方面,这个实现方式本质上将父布局的大小等同于显示区域的大小,将其作为隐含的假设,固化在了实现中;而实质上适配方案是需要随着外层父布局的大小而变化的。
基于后续可维护性方面的考量,这种实现方式并不合适。
网友评论