Android 监听键盘的弹出与关闭,收起

来源:互联网 发布:斗鱼客户端mac版 编辑:程序博客网 时间:2024/05/16 01:53

新建键盘的监听类

import android.app.Activity;import android.view.View;import android.view.ViewTreeObserver;/** * Created by ly on 2017/3/21 0021. */public class KeyboardChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {    private static final String TAG = "ListenerHandler";    private View mContentView;    private int mOriginHeight;    private int mPreHeight;    private KeyBoardListener mKeyBoardListen;    public interface KeyBoardListener {        /**         * call back         *         * @param isShow         true is show else hidden         * @param keyboardHeight keyboard height         */        void onKeyboardChange(boolean isShow, int keyboardHeight);    }    public void setKeyBoardListener(KeyBoardListener keyBoardListen) {        this.mKeyBoardListen = keyBoardListen;    }    public KeyboardChangeListener(Activity contextObj) {        if (contextObj == null) {            return;        }        mContentView = findContentView(contextObj);        if (mContentView != null) {            addContentTreeObserver();        }    }    private View findContentView(Activity contextObj) {        return contextObj.findViewById(android.R.id.content);    }    private void addContentTreeObserver() {        mContentView.getViewTreeObserver().addOnGlobalLayoutListener(this);    }    @Override    public void onGlobalLayout() {        int currHeight = mContentView.getHeight();        if (currHeight == 0) {            return;        }        boolean hasChange = false;        if (mPreHeight == 0) {            mPreHeight = currHeight;            mOriginHeight = currHeight;        } else {            if (mPreHeight != currHeight) {                hasChange = true;                mPreHeight = currHeight;            } else {                hasChange = false;            }        }        if (hasChange) {            boolean isShow;            int keyboardHeight = 0;            if (mOriginHeight == currHeight) {                //hidden                isShow = false;            } else {                //show                keyboardHeight = mOriginHeight - currHeight;                isShow = true;            }            if (mKeyBoardListen != null) {                mKeyBoardListen.onKeyboardChange(isShow, keyboardHeight);            }        }    }}

具体的使用方法 在activity中调用

KeyboardChangeListener softKeyboardStateHelper = new KeyboardChangeListener(this);        softKeyboardStateHelper.setKeyBoardListener(new KeyboardChangeListener.KeyBoardListener() {            @Override            public void onKeyboardChange(boolean isShow, int keyboardHeight) {                if (isShow) {                    //键盘的弹出                } else {                    //键盘的收起                }            }        });


0 0
原创粉丝点击