软键盘与BottomSheetDialogFragment内的EditText下的视图重叠

问题描述 投票:0回答:3

我在EditTextButton下面只有EditTextBottomSheetDialogFragment

<ConstraintLayout>
 <EditText/>
 <Button/>
</ConstraintLayout>

当软键盘打开时,它覆盖了qazxsw poi下面的所有东西(在我的情况下是qazxsw poi)。

我在我的Button中使用EditText

我已经google了很多,已经找到了类似的旧问题,但没有正确答案。

windowSoftInputMode="adjustResize"

Activity

这是某种有缺陷的行为吗?

android android-layout bottom-sheet
3个回答
1
投票

我找到了相同案例的解决方案。您可以在显示软键盘时增加填充。该解决方案适用于API 19+。

soft keyboard is covering bottom sheet dialog

How to adjust size of BottomSheet with Edittext and button below it?打电话给import android.graphics.Rect import android.os.Build import android.view.View import android.view.ViewTreeObserver import androidx.core.view.updatePaddingRelative class UnderKeyboardViewElevator(private val decorView: View, private val contentView: View) { private var initialPaddingBottom: Int = contentView.paddingBottom private var onGlobalLayoutListener = ViewTreeObserver.OnGlobalLayoutListener { val r = Rect() decorView.getWindowVisibleDisplayFrame(r) val height = decorView.context.resources.displayMetrics.heightPixels val diff = height - r.bottom if (diff != 0) { val targetPadding = diff + initialPaddingBottom if (contentView.paddingBottom != targetPadding) { contentView.updatePaddingRelative(bottom = targetPadding) } } else { if (contentView.paddingBottom != initialPaddingBottom) { contentView.updatePaddingRelative(bottom = initialPaddingBottom) } } } init { if (Build.VERSION.SDK_INT >= 19) { decorView.viewTreeObserver.addOnGlobalLayoutListener(onGlobalLayoutListener) } } fun enable() { if (Build.VERSION.SDK_INT >= 19) { decorView.viewTreeObserver.addOnGlobalLayoutListener(onGlobalLayoutListener) } } fun disable() { if (Build.VERSION.SDK_INT >= 19) { decorView.viewTreeObserver.removeOnGlobalLayoutListener(onGlobalLayoutListener) } } } ,在enable()打电话给onStart()

disable()

希望它会有用。


0
投票

使用ScrollView环绕根视图,最好使用scrollbars = none。除了用于解决此问题之外,ScrollView将不会对您的布局进行任何更改。

然后在要在键盘上方完全显示的视图上设置fitsSystemWindows =“true”。


0
投票

onStop()中使用它:

    private var elevator: UnderKeyboardViewElevator? = null

    //...

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val dialog = BottomSheetDialog(context!!)

        val dialogRoot = View.inflate(context, R.layout.my_layout, null)
        dialog.setContentView(dialogRoot)

        val decorView = activity!!.window!!.decorView
        elevator = UnderKeyboardViewElevator(decorView, dialogRoot)

        return dialog
    }

    override fun onStart() {
        elevator?.enable()
        super.onStart()
    }

    override fun onStop() {
        super.onStop()
        elevator?.disable()
    }

    //...
© www.soinside.com 2019 - 2024. All rights reserved.