yescpu / KeyboardChangeListener

Simple and powerful keyboard show/hidden listeners
368 stars 111 forks source link

由于键盘类型不同,高度不同所导致的切换键盘的时候,没有回调 #16

Open tudou152 opened 4 years ago

tudou152 commented 4 years ago

https://github.com/yescpu/KeyboardChangeListener/blob/cad88f06311774239c40bf284829c0549fa879f6/keyboardchangelib/src/main/java/com/yescpu/keyboardchangelib/KeyboardChangeListener.java#L102-L105

这里的回调仅仅当 mShowFlag != currentShow 条件成立的时候才会回调,这里其实是有问题的。

为了方便测试,我自己在你的基础上添加了额外的测试信息

override fun onGlobalLayout() {
        ...
        Log.d(TAG, "onGlobalLayout() called  screenHeight $screenHeight VisibleDisplayHeight $windowBottom, keyboardHeight: $keyboardHeight")
        val currentShow = keyboardHeight > MIN_KEYBOARD_HEIGHT
        Log.d(TAG, "mShowFlag: $mShowFlag, currentSHow: $currentShow")
        if (mShowFlag != currentShow) {
            mShowFlag = currentShow
            keyboardListener.onKeyboardChange(currentShow, keyboardHeight)
        }
    }
// 这个是第一次点击输入手机号的时候
 D/KeyboardChangeListener: onGlobalLayout() called  screenHeight 1920 VisibleDisplayHeight 1229, keyboardHeight: 691
 D/KeyboardChangeListener: mShowFlag: false, currentShow: true

// 这个是第二次点击输入密码 EditText的时候,正常情况,每切换一次,会出现 3 对日志(共6条)
D/KeyboardChangeListener: onGlobalLayout() called  screenHeight 1920 VisibleDisplayHeight 1229, keyboardHeight: 691
D/KeyboardChangeListener: mShowFlag: true, currentShow: true
D/KeyboardChangeListener: onGlobalLayout() called  screenHeight 1920 VisibleDisplayHeight 1920, keyboardHeight: 0
D/KeyboardChangeListener: mShowFlag: true, currentShow: false
D/KeyboardChangeListener: onGlobalLayout() called  screenHeight 1920 VisibleDisplayHeight 1008, keyboardHeight: 912
D/KeyboardChangeListener: mShowFlag: false, currentShow: true
// 异常情况,只会出现 2 对日志(共 4)条日志
D/KeyboardChangeListener: onGlobalLayout() called  screenHeight 1920 VisibleDisplayHeight 1008, keyboardHeight: 912
D/KeyboardChangeListener: mShowFlag: true, currentShow: true
D/KeyboardChangeListener: onGlobalLayout() called  screenHeight 1920 VisibleDisplayHeight 1229, keyboardHeight: 691
D/KeyboardChangeListener: mShowFlag: true, currentShow: true