全屏Activity弹出键盘不顶起布局

最近遇到的一个问题是全屏Activity中要求弹出键盘不顶起布局,首先windowSoftInputMode的取值是有多个的,在全屏场景下adjustPan是没有用的,需要使用adjustResize首先确保键盘不顶起布局。

        android:windowSoftInputMode="stateHidden|adjustResize"

但是单纯设置windowSoftInputMode在布局方面又会有新的问题,那就是可能需要在键盘上方展示文本框,但是键盘的高度是不固定的,在全屏场景下布局不被顶起,因此文本框会被键盘遮挡,为解决这个问题,需要在键盘弹起时测量键盘的高度,代码如下

//在键盘弹起的地方对文本库增加addOnGlobalLayoutListener,我xml的布局是ConstraintLayout
            binding.etDiy.viewTreeObserver
                .addOnGlobalLayoutListener {
                    val rect = Rect()
                    binding.root.getWindowVisibleDisplayFrame(rect)
                    val screenHeight = binding.root.height
                    val keypadHeight = screenHeight - rect.bottom

                    if (keypadHeight > screenHeight * 0.15) {
                        if (isSet) return@addOnGlobalLayoutListener
                        isSet = true
                        val constraintSet = ConstraintSet()
                        constraintSet.clone(binding.root)

                        constraintSet.connect(
                            binding.viewBackground.id,
                            ConstraintSet.BOTTOM,
                            ConstraintSet.PARENT_ID,
                            ConstraintSet.BOTTOM,
                            keypadHeight
                        )
                        constraintSet.applyTo(binding.root)
                    } else {
                        if (!isSet) return@addOnGlobalLayoutListener
                        isSet = false
                        val constraintSet = ConstraintSet()
                        constraintSet.clone(binding.root)
                        constraintSet.connect(
                            binding.viewBackground.id,
                            ConstraintSet.BOTTOM,
                            ConstraintSet.PARENT_ID,
                            ConstraintSet.BOTTOM,
                            0
                        )
                        constraintSet.applyTo(binding.root)
                    }
                }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值