android 输入法显示和隐藏监听

来源:互联网 发布:python exit return 编辑:程序博客网 时间:2024/06/07 16:42

一、应用场景

在Android程序开发中,edit获取焦点是,输入法可以将布局自动顶上去。有一些特别点的需求,正常布局和顶上去的布局会有少许改变,这个时候就需要监听输入法的状态。


二、产生的问题

在Android系统中并没有提供对输入法状态的监听。需要程序自己去识别输入法是否显示和隐藏。


三、解决思路

3.1、监听EditText 在屏幕的纵坐标Y

3.2、如果是Y变小了,说明输入法的软键盘将EditText网上顶了。

3.3、如果是Y变大了,说明输入法的软键盘隐藏。

3.3、如果Y不变,软键盘的状态没有改变。


四、实现代码

4.1、实现OnGlobalLayoutListener接口

public class SoftInputChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {

4.2、覆写onGlobalLayout()方法

@Overridepublic void onGlobalLayout() {     positionY = getPositionY();       if(positionY<=0)        return;       startMonitor();}

4.3、监听monitorView在屏幕上的纵坐标

private void startMonitor(){    monitorView.postDelayed(new Runnable() {        @Override        public void run() {            int tempY = getPositionY();            if (tempY == positionY) {                postCount++;                if (MAX_POST_COUNT == postCount) {                    resetMonitor();                    return;                }                startMonitor();            } else if (tempY < positionY) {  //软键盘弹出                resetMonitor();                if(mKeyBoardListen != null)                    mKeyBoardListen.onKeyboardChange(true);            } else { //软键盘隐藏                resetMonitor();                if(mKeyBoardListen != null)                    mKeyBoardListen.onKeyboardChange(false);                           }         }    },50);}
4.4、监听有三种情况

4.4.1、纵坐标变小

软键盘弹出。

4.4.2、纵坐标变大

软键盘隐藏

4.4.3、纵坐标不变

软键盘状态不变,也有可能onLayout的时间花费太长,没有纵坐标的位置变化,所以重复延时监听3次,3次都没有变化。避免onLayout没有监听到位置变化。



原创粉丝点击