美文网首页
Android 探测软键盘弹出

Android 探测软键盘弹出

作者: xandeer | 来源:发表于2017-09-30 10:57 被阅读15次

    Android 没有提供软键盘相关的事件,因此需要通过其它方式实现。在 StackOverflow 找到的普遍认同的解决方案是重新实现 ViewTreeObserver.OnGlobalLayoutListener,代码如下:

    class MyGlobalLayoutListener : ViewTreeObserver.OnGlobalLayoutListener {
        override fun onGlobalLayout() {
          val r = Rect()
          view.rootView.getWindowVisibleDisplayFrame(r)
          val screenHeight = view.rootView.height
          val keypadHeight = screenHeight - (r.bottom - r.top)
    
          if (keypadHeight > screenHeight / 4) {
            doSomethingWhenKeyboardShowed()
          }
        }
      }
    

    Activity.onCreateFragment.onActivityCreated 中添加类似下面的代码:

    layoutListener = MyGlobalLayoutListener()
    view.viewTreeObserver.addOnGlobalLayoutListener(layoutListener)
    

    在需要注销此事件时执行:

    view.viewTreeObserver.removeOnGlobalLayoutListener(layoutListener)
    

    此方法存在的问题:

    1. keypadHeight > screenHeight / 4 不一定适用所有场景
    2. 带有副作用,其它布局变化也可能满足 keypadHeight > screenHeight / 4

    因此,最好是再添加一个 flag,在键盘弹出前将其置为 true

    if (isWillShowKeyboard && keypadHeight > screenHeight / 4) {
      isWillShowKeyboard = false
      doSomethingWhenKeyboardShowed()
    }
    

    相关文章

      网友评论

          本文标题:Android 探测软键盘弹出

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