Android开发中,怎样监听键盘弹出收回事件( 三 )
■网友
这些回答一个都不能解决弹出全屏键盘的监听,弹出全屏键盘根本不会触发onGlobalLayout
■网友
一般的方案是监听跟布局的高度,但是设置不会顶起的属性,可能会有误差。暂时感觉都是有弊端
■网友
看了这个问题下的所有回答,我按照个人的理解稍微做一点总结.
监听键盘弹出通过 监听rootView的高度变化.
监听键盘收起 可以通过有一位层主提到的重写 Edittext.onKeyPreime() 方法.
不过也不完美.
如果想单纯的监听软键盘的弹出和收回感觉很难实现,一般都需要结合业务需求通过界面变化来感知.
■网友
我现在一直被这类问题困扰:
如果单纯的监听软键盘的弹出,楼上的方案,几乎没问题,包括软键盘的弹出和关闭监听的效果在界面不复杂的情况下,性能上面也不会太麻烦.
但是现在的方式onGlobalLayout监听布局的变化,本身比较对性能要求比较高,本人是做直播App 的,但是在直播间复杂页面,通过上述方法监听软键盘弹起,在做一些简单的动作,就会发现在低端机型巨卡顿,像小米4这种中端机型,卡顿不太明显,能接受.
就是在比较低端一点的机型,onGlobalLayout这个方法就吃力太多,每次弹出软键盘真的太卡了.这几天一直在研究怎么优化.头疼死了.
------- 后来我发现---造成卡顿是由于界面重绘导致的.------
监听软键盘收回,onGlobaLayout这种方式应该是比较不错的,可能还会有更合适的方法.
■网友
参考自:EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听 - 丶牛皮丶 - 博客园
【Android开发中,怎样监听键盘弹出收回事件】 亲测可用的, 原理和月恒的差不多 //监听软键盘是否显示或隐藏 mReplayRelativeLayout.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); mReplayRelativeLayout.getWindowVisibleDisplayFrame(r); int screenHeight = mReplayRelativeLayout.getRootView() .getHeight(); int heightDifference = screenHeight - (r.bottom); if (heightDifference \u0026gt; 200) { //软键盘显示// changeKeyboardHeight(heightDifference); } else { //软键盘隐藏 } } });
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
