Android 关于监听键盘状态的一个偏方
来源:互联网 发布:linux安装yum 编辑:程序博客网 时间:2024/06/10 19:45
早晨刚来公司,同事就在群里面求助一个问题,说是昨晚加班到9点多也没解决,直接将我吓尿,但是本着雷锋精神,即使是再大的困难我们也要帮同事解决嘛,毕竟同事还答应中午一杯奶茶呢,拼了······
听同事描述了下,了解到原来是监听键盘状态的问题,妈的,键盘状态,有过这类开发经历的人都会吐槽的,这特么的就是个坑,如果你百度会出来一大堆博客,
文章,各种解决方案,但是呢,其中很少有对的,同事也说了,昨晚加班到9点,试过了网上能找到的几乎所有方案,都不行,头都大了。
我先来描述下需求,在一个评论页,底部有个提交按钮,在评论框点击弹出键盘输入时,这个原先处于底部的提交按钮会被键盘顶到中间(如图2),UI那边觉得这个不美观,需要在键盘弹出后将其隐藏,在键盘收起后再显示。
同事看到这个需求的时候,第一个想到的就是监听键盘的弹出,收起状态,通过其监听结果来做出布局调整。没毛病,很好的想法,但是现实是 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,不要弄错了。
- Android 关于监听键盘状态的一个偏方
- Android监听键盘状态变化
- Android-监听虚拟键盘状态
- android开发键盘状态监听
- 关于android监听网路状态的代码
- android 监听键盘弹出收起状态
- android 学习笔记十二 监听键盘状态
- 一个键盘监听的例子
- android朋友圈监听键盘状态 点击空白区域隐藏键盘
- 监听键盘状态
- swift 监听键盘状态
- 一个老中医的偏方
- 一个老中医的偏方
- 一个老中医的偏方
- Android 监听手机键盘打开和关闭状态
- 发一个键盘监听工具的代码
- Android电池状态的监听
- android 电话状态的监听
- hd 4548 美素数
- Hbase优化之Region分割设置的问题
- Android 属性动画(Property Animation) 完全解析
- Spring JdbcTemplate 与 事务管理
- LeetCode-226:Invert Binary Tree
- Android 关于监听键盘状态的一个偏方
- java常量池以及“==”字符串比较
- 素数判定(素数筛法)(欧拉)
- linux 下oracle 11g sys和system密码丢失
- C++中类的组合与构造函数
- hdoj1222Wolf and Rabbit
- PAT 1015Graduate Admission (30)
- spark 1.6.0 core源码分析9 从简单例子看action
- jdk1.6 完美卸载