解决Android软键盘和表情面板切换界面闪动问题


Android软键盘会压缩Activity窗口大小,在软键盘和表情面板之间切换的时候会造成界面跳动,影响体验,如下图:



造成这个原因和AndroidManifest.xml文件里面设置Activity的windowSoftInputMode属性有关:

当属性为adjustResize的时候,软键盘弹出时会挤压Activity窗口大小,这样可以保证输入法不会覆盖到输入框;

当属性为adjustNothing的时候,软键盘弹出时会覆盖到当前窗口上,窗口大小不变,这种情况输入法有可能会覆盖输入框。


解决这个问题的思路:

1.表情面板放在输入框底部,默认为GONE;表情面板和输入法高度一样

2.默认windowSoftInputMode为adjustResize,这时候打开软键盘和表情面板都没有问题;

3.1 如果打开的是表情面板,则设置windowSoftInputMode为adjustNothing;

这时有两种选择:a.打开软键盘,由于属性为adjustNothing,所以窗口大小不会变,软键盘会覆盖表情 面板,界面不会闪动;b.关闭表情面 板,将windowSoftInputMode属性改回adjustResize,防止下次打开软键盘把输入框覆盖了

3.2 如果打开的是软键盘,什么都不用做

这是有两种选择:a.打开表情面板,操作如3.1,注意这个时候windowSoftInputMode属性由adjustResize变成了adjustNothing,窗口大小会变化,由压缩了的大小变成原来的大小,但是由于这个时候我们把表情面板立刻设为VISIBLE,而且表情面板和输入法高度一样,所以也看不出界面有闪动;b.关闭软键盘,什么都不用做

通过以上方法修改以后,软键盘和输入面板切换界面不再闪动,如下图:





源码地址:

https://github.com/xh2009cn/KeyboardPanelSwitcher

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值