Android: 实现类似QQ、微信的表情输入键盘

该博客介绍了如何在Android应用中实现类似QQ和微信的表情输入键盘。作者探讨了两种常见思路,包括动态改变SoftInputMode和使用Dialog,并指出这两种方法的局限性。最终,作者采用adjustPan模式,通过检测软键盘高度来实现键盘与表情面板的无缝切换。文中提供了检测软键盘高度、手动显示/隐藏软键盘的代码示例,并讨论了解决程序切换时显示冲突的策略。
摘要由CSDN通过智能技术生成

需求

最近在写北邮人论坛客户端时,有一个需求是实现像手机QQ、微信那样的表情输入键盘,效果图:

demo

表情键盘本身并不难做,无非就是一个带SlidingTab的ViewPager,困扰我的地方在于,如何正确处理系统软键盘与表情键盘之间的显隐关系。

Google了一下,大概有这么几种思路:

第一种:动态改变SoftInputMode

这篇博文是国内网上转载比较多的方法,软键盘显示时将SoftInputMode设置为「stateVisible|adjustResize」,表情键盘显示时调整为「adjustPan」。

但在我实际使用过程中效果并不理想,一是我需要在一个ListView的底部实现表情键盘,这样动态更改SoftInputMode会导致ListView上下跳动;二是切换到别的界面再切换回来时软键盘的显隐状态偶尔会有冲突,最终我放弃了这种方法。

第二种:Dialog

Emoticons-Keyboard,这个项目的实现方法是直接在软键盘上覆盖显示一个Dialog,避开了大部分的显示逻辑操作,思路非常独特,可惜我编译运行后发现显示效果并不好,除了动画效果,最大的问题仍然是是从别的界面切换过来时,与软键盘的显示有冲突

基本思路

上面提到的两个项目给了我很大的启发,我反复尝试了微信、微博、手机QQ等应用的表情键盘逻辑,发现它们切换键盘并不会导致ListView跳动,如果没有别的什么黑科技的话,基本可以断定使用的SoftInputMode就是adjustPan。(SoftInputMode各个属性值的意义

既然是adjustPan就好说了,软键盘显示的时候不会导致ListView跳动,那么Activity的底部必然有一个跟软键盘相同高度的View被软键盘覆盖了,这个View其实就是表情输入键盘,这样点击表情按钮的时候只需要显示隐藏软键盘,背后的表情框就显示出来了。

思路有了,接下来就是梳理一下所需要的技术点:

  • 如何检测软键盘高度(用于动态设置表情键盘的高度)?
  • 在代码中如何手动显示/隐藏软键盘?
  • 如何防止从别的界面切换过来时,软键盘状态改变了有可能导致的显示冲突?

如果这三个问题解决了&

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值