美文网首页
监听键盘弹起、收缩的方法

监听键盘弹起、收缩的方法

作者: 卖梦为生_若愚 | 来源:发表于2017-06-22 14:05 被阅读0次

    工具类:

    public classSoftKeyBoardListener {

    privateViewrootView;//activity的根视图

    private introotViewVisibleHeight;//纪录根视图的显示高度

    privateOnSoftKeyBoardChangeListeneronSoftKeyBoardChangeListener;

    publicSoftKeyBoardListener(Activity activity) {

    //获取activity的根视图

    rootView= activity.getWindow().getDecorView();

    //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变

    rootView.getViewTreeObserver().addOnGlobalLayoutListener(newViewTreeObserver.OnGlobalLayoutListener() {

    @Override

    public voidonGlobalLayout() {

    //获取当前根视图在屏幕上显示的大小

    Rect r =newRect();

    rootView.getWindowVisibleDisplayFrame(r);

    intvisibleHeight = r.height();

    if(rootViewVisibleHeight==0) {

    rootViewVisibleHeight= visibleHeight;

    return;

    }

    //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变

    if(rootViewVisibleHeight== visibleHeight) {

    return;

    }

    //根视图显示高度变小超过300,可以看作软键盘显示了

    if(rootViewVisibleHeight- visibleHeight >200) {

    if(onSoftKeyBoardChangeListener!=null) {

    onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight- visibleHeight);

    }

    rootViewVisibleHeight= visibleHeight;

    return;

    }

    //根视图显示高度变大超过300,可以看作软键盘隐藏了

    if(visibleHeight -rootViewVisibleHeight>200) {

    if(onSoftKeyBoardChangeListener!=null) {

    onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight -rootViewVisibleHeight);

    }

    rootViewVisibleHeight= visibleHeight;

    return;

    }

    }

    });

    }

    private voidsetOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {

    this.onSoftKeyBoardChangeListener= onSoftKeyBoardChangeListener;

    }

    public interfaceOnSoftKeyBoardChangeListener {

    voidkeyBoardShow(intheight);

    voidkeyBoardHide(intheight);

    }

    public static voidsetListener(Activity activity,OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {

    SoftKeyBoardListener softKeyBoardListener =newSoftKeyBoardListener(activity);

    softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);

    }

    public static voidcloseKeybord(EditText mEditText,Context mContext) {

    InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    imm.hideSoftInputFromWindow(mEditText.getWindowToken(),0);

    mEditText.setFocusable(false);

    }

    }

    使用:

    SoftKeyBoardListener.setListener(this,

    newSoftKeyBoardListener.OnSoftKeyBoardChangeListener() {

    @Override

    public voidkeyBoardShow(intheight) {

    Log.e("TAG","keyBoardShow: ");

    if(setPadding==true) {

    scroll.setPadding(0,0,0,height);

    scroll.scrollTo(0,0);

    }

    }

    @SuppressLint("WrongConstant")

    @Override

    public voidkeyBoardHide(intheight) {

    scroll.setPadding(0,0,0,0);

    scroll.scrollTo(0,0);

    }

    });

    相关文章

      网友评论

          本文标题:监听键盘弹起、收缩的方法

          本文链接:https://www.haomeiwen.com/subject/ggkfcxtx.html