温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android键盘面板冲突及布局闪动的处理方法

发布时间:2021-11-26 17:16:28 来源:亿速云 阅读:454 作者:柒染 栏目:移动开发

Android键盘面板冲突及布局闪动的处理方法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

这次主要是根据核心思想的实践,实践原理是通过CustomRootLayout布局变化,来获知是否是键盘引起的真正的布局变化,进而处理到接下来PanelLayout的onMersure中。

  • 新算法不再动态修改View#LayoutParams,而是更加简单明了的方式

  • ***代码在原基础上自动动态适配面板高度与键盘高度等高,很大程度上优化了体验。

我们可以看到微信中的 从键盘与微信的切换是无缝的,而且是无闪动的,这种基础体验是符合预期的。

但是实际中,简单的 键盘与面板切换 是会有闪动,问题的。今天我们就实践分析与解决这个问题。

最终效果对比:

Android键盘面板冲突及布局闪动的处理方法

Android键盘面板冲突及布局闪动的处理方法

I. 准备

以下建立在android:windowSoftInputMode带有adjustResize的基础上。

如图,为了方便分析,我们分出3个View:

Android键盘面板冲突及布局闪动的处理方法

  • CustomRootView: 除去statusBar与ActionBar(ToolBar…balabala)

  • FootRootView: 整个底部(包括输入框与底部面板在内的整个View)

  • PanelView: 面板View

整个处理过程,其实需要分为两块处理:

从PanelView切换到Keybord

现象:  由于显示Keybord时直接PanelView#setVisibility(View.GONE),导致会出现整个FooterRootView到底部然后又被键盘顶起。

符合预期的应该: 直接被键盘顶起,不需要到底部再顶起。

从Keybord切换到PanelView

现象:  由于隐藏Keybord时,直接PanelView#setVisibility(View.VISIBLE),导致会出现整个FootRootView先被顶到键盘上面,然后再随着键盘的动画,下到底部。

符合预期的应该: 随着键盘收下直接切换到底部,而配有被键盘顶起的闪动。

II. 处理

原理

在真正由Keybord导致布局真正将要变化的时候,才对PanelView做出适配。(注意,所有的判断处理要在Super.onMeasure之前完成判断)

方法:

通过CustomRootView高度的变化,来保证在Super.onMeasure之前获得真正的由于键盘导致布局将要变化,然后告知PanelView,让其在Super.onMeasure之前给到有效高度。

需要注意:

1)  在adjustResize模式下,键盘弹起会导致CustomRootView的高度变小,键盘收回会导致CustomRootView的高度变大,反之变小。因此可以通过这个机制获知真正的PanelView将要变化的时机。

2) 由于到了onLayout,clipRect的大小已经确定了,又要避免不多次调用onMeasure因此要在Super.onMeasure之前

3) 由于键盘收回的时候,会触发多次measure,如果  不判断真正的由于键盘收回导致布局将要变化,就直接给View#VISIBLE,依然会有闪动的情况。

4) 从Keybord切换到PanelView导致的布局冲突,只有在Keybord正在显示的时候。

5) 从PanelView切换到Keybord导致的布局冲突,已经在PanelView与CustomRootView中内部处理。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI