记一次解决键盘布局冲突闪动的过程

2018-02-27 11:33:25来源:https://www.jianshu.com/p/cce6d57eb0d4作者:iSanShu人点击

分享


上图:





图中出现的两个问题:

1:显示表情面板时键盘把布局顶上去了     2:显示键盘时布局掉到底部再被键盘顶起来。

问题1解决过程:

先把根布局的LinearLayout换成自定义的LinearLayout(继承LinearLayout,重写onMeasure()方法,加上打印语句,点击表情图标然后看打印台情况)





打印台信息:





分析:测试机分辨率为1080×1920。可以看到,,根布局的高度由861变为1692(除去状态栏和actionbar高度),界面各自重绘了一次,所以出现前面闪动的问题。完美的显示应该是高度一直为1692。

解决思路:在点击表情图标时判断是否要从键盘切到表情面板,如果是则在根布局的onMeasure()方法手动给它一次1692的高度值,让布局按1692的高度绘制,解决了861那一帧。

自定义根布局代码:





MainActivity的代码:





现在跑下代码试试看效果:





good,键盘把布局顶上去的问题解决了。然而仔细看还有另一个问题,就是从面板切到键盘时,布局先掉到底部然后被键盘顶起来。

看打印台信息:





分析:和上面的情况相反,此时是从1692转为861。很明显了,完美的显示高度应该是一直为861,而不是从1692到861。

解决思路:跟上面一样,先判断是否从表情面板切到键盘,如果是则手动给根布局一个861的高度。过滤掉1692那一帧。

根布局代码:





MainActivity代码:





看看效果:





一次粗糙的解决过程就结束了。当然还有很多细节需要调整,比如随键盘高度调整:





PS:微信调整输入法高度时,会出现布局闪动情况。。。








最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台