Android软键盘遮挡输入框解决方案

163 阅读1分钟

直接上代码

fun FragmentActivity.displaysFullEditTextView2() {
    val fragmentActivity = this
    KeyboardUtils.addKeyboardToggleListener(
        fragmentActivity,
        object : KeyboardUtils.SoftKeyboardToggleListener {
            override fun onToggleSoftKeyboard(isVisible: Boolean) {
                if (isVisible) {
                    val focusedView = fragmentActivity.currentFocus
                    if (focusedView != null && focusedView is EditText) {
                        val rect2 = Rect()
                        fragmentActivity.window.decorView.getWindowVisibleDisplayFrame(rect2)
                        val focusBottom = rect2.bottom
                        val editViewInContainerBottom = focusedView.bottom
                        if (editViewInContainerBottom > focusBottom) {
                            val distance = editViewInContainerBottom - focusBottom
                            fragmentActivity.window.decorView.scrollTo(
                                0,
                                distance + KEYBOARD_PADDING_WITH_EDIT
                            )
                        }
                    }
                } else {
                    fragmentActivity.window.decorView.scrollTo(0, 0)
                }
            }
        }
    )
}
  1. 原理就是拿到屏幕获得焦点的editText
val focusedView = fragmentActivity.currentFocus
if (focusedView != null && focusedView is EditText) {}
  1. 判断一番后(0.0),平移整个rootView
fragmentActivity.window.decorView.scrollTo(
    0,
    distance + KEYBOARD_PADDING_WITH_EDIT
)