Android 关于监听键盘状态的一个偏方

来源:互联网 发布:linux安装yum 编辑:程序博客网 时间:2024/06/10 19:45

早晨刚来公司,同事就在群里面求助一个问题,说是昨晚加班到9点多也没解决,直接将我吓尿,但是本着雷锋精神,即使是再大的困难我们也要帮同事解决嘛,毕竟同事还答应中午一杯奶茶呢,拼了······
听同事描述了下,了解到原来是监听键盘状态的问题,妈的,键盘状态,有过这类开发经历的人都会吐槽的,这特么的就是个坑,如果你百度会出来一大堆博客,
文章,各种解决方案,但是呢,其中很少有对的,同事也说了,昨晚加班到9点,试过了网上能找到的几乎所有方案,都不行,头都大了。

我先来描述下需求,在一个评论页,底部有个提交按钮,在评论框点击弹出键盘输入时,这个原先处于底部的提交按钮会被键盘顶到中间(如图2),UI那边觉得这个不美观,需要在键盘弹出后将其隐藏,在键盘收起后再显示。
图(1)
图(2)

同事看到这个需求的时候,第一个想到的就是监听键盘的弹出,收起状态,通过其监听结果来做出布局调整。没毛病,很好的想法,但是现实是 Google 关于键盘方面的方法就是一坨翔,试了各种方案发现根本不行,本来我一看到这个需求第一个想法也是查询各种方法来达到监听键盘的状态,但是听到同事说的,那这条路就被只能pass了。
直接监听键盘状态这条路不通,那就绕过这条路,在这两个页面我们可以发现提交按钮的位置是变化的,确切的说是和键盘出现关联的,当键盘弹出后处于屏幕中间,键盘未显示则处于底部,那可以通过监听提交按钮的位置来判断键盘状态,试一下。我在这取的是按钮距离顶部的距离,也就是 getTop() 方法,打印下,果然可行。关键代码如下:

ViewTreeObserver vto = tijiaoLayout.getViewTreeObserver();vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {    @Override    public void onGlobalLayout() {       Log.i("test",tijiaoLayout.getTop()+"");    }});

通过打印发现 top 值发生变化,而且这个变化是与键盘想关联的,奶茶到手,哈哈哈···········

这里需要注意的是上面代码中的 tijiaoLayout 是屏幕父布局中的一个childView ,如果你监听的是button的,那获取到的top 是距离button父布局tijiaoLayout 的头部距离,永远是0,不要弄错了。

0 0
原创粉丝点击