Open tudou152 opened 4 years ago
https://github.com/yescpu/KeyboardChangeListener/blob/cad88f06311774239c40bf284829c0549fa879f6/keyboardchangelib/src/main/java/com/yescpu/keyboardchangelib/KeyboardChangeListener.java#L102-L105
这里的回调仅仅当 mShowFlag != currentShow 条件成立的时候才会回调,这里其实是有问题的。
mShowFlag != currentShow
EditText
inputType
phone
textPassword
为了方便测试,我自己在你的基础上添加了额外的测试信息
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) } }
onKeyboardChange
// 这个是第一次点击输入手机号的时候 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
mShowFlag = true, 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
if (mShowFlag != currentShow || (mShowFlag && (previousKeyboardHeight != keyboardHeight))) { mShowFlag = currentShow keyboardListener.onKeyboardChange(currentShow, keyboardHeight) }
https://github.com/yescpu/KeyboardChangeListener/blob/cad88f06311774239c40bf284829c0549fa879f6/keyboardchangelib/src/main/java/com/yescpu/keyboardchangelib/KeyboardChangeListener.java#L102-L105
这里的回调仅仅当
mShowFlag != currentShow
条件成立的时候才会回调,这里其实是有问题的。EditText
,而且inputType
的类型不相同的时候,会出现问题,具体操作如下:EditText
,一个EditText
的inputType
为phone
,另外一个inputType
为textPassword
.EditText
,弹出只能输入数字的键盘,他的高度在我的手机上是691 像素EditText
, 会弹出可以同时输入账号和密码的键盘,高度为912像素为了方便测试,我自己在你的基础上添加了额外的测试信息
onKeyboardChange
方法,因为mShowFlag != currentShow
onKeyboardChange
方法。mShowFlag = true, currentShow = true
,但是键盘的高度是不同的,从这里也可以得出解决方法。