最近公司项目需要写一个悬浮球,其中有个功能是键盘避让想了很久(踩了很多坑)- -!,记录下来,供大家参考。
首先网上的一些实现并不管用。
比如监听布局高度的变化,只能在应用内实现,全局并不能监听的到。
还有的是使用Notifacation监听输入法变化来实现,这个方法要求有点苛刻,要求手机必须安装俩个以上的输入法。(而且在原生系统貌似也没啥用)
Android也没有提供特定的API监听软键盘弹出关闭。
由于是公司自己做Rom,所以可以从源码层级考虑,修改Framework相关代码来实现,撸了一遍输入法相关的源码。发现InputmethodManagerService中有两个方法showSoftInput 和hideSoftInput 于是打开Log试了一下,发现可以在这两个方法中监听键盘打开和关闭。发两个广播就可以了。
接收到广播,在项目中接收广播,修改悬浮球位置即可。