Closed limalivy closed 4 years ago
你可以看看这些代码
Inset 的处理,NavigationScene 每个页面都会分发一次完整的 Inset https://github.com/bytedance/scene/blob/master/library/scene/src/main/java/com/bytedance/scene/utlity/DispatchWindowInsetsListener.java
你说的底下的 Scene 变形,说的是一个半透明的 Scene 盖在另外一个 Scene 上面吧,因为输入法的 flag 是 Window 级别的,一改,都收到了影响
是的,半透明的 Scene A盖在另外一个 Scene B上面,用作弹窗目的。需要实现A展示以PAN模式显式,B展示以NOTHING模式
Android 的 pan 是以修改 WindowInsets 实现,会跟普通的虚拟导航栏的 WindowInsets 混在一起。我感觉没啥太好的框架层提供 API 方法实现你要的效果,只能很琐碎在业务用的地方补些逻辑,让这个时候的 B,无视 WindowInsets 的变化。
很高兴发现这个项目,我们的项目也是完全基于单Activity模式的,UI框架也是叫[Scene],由我独立开发维护,很多核心思想也和这个项目接近,目前暂时没有开源。在我们探索的过程中发现如果弹窗(基于Scene)需要软键盘输入就会导致底下的Scene变形,原因是Scene实际是基于View的,所有View都是在同一Window上操作的,而软键盘是直接操作Window。所以当软键盘弹出的时候也许UI框架需要做一个软键盘导致的View layout,measure 事件的特殊处理,相当于软键盘弹出事件分发机制。您觉得软键盘应该怎么处理呢?