软键盘将其上方的按钮向上推。如何解决?

时间:2018-12-18 09:45:16

标签: android keyboard window-soft-input-mode

我有一个ConstraintLayout,下面是ScorllView和Button(附加到屏幕底部。当我在ScrollView中编辑EditText输入时。然后出现的键盘将ScrollView内容向上移动(期望的行为,因此我可以滚动到末尾) ),但也可以将按钮向上推(不良行为)。

我想我可以更改windowAdjustMode,也许我可以检测到键盘显示然后隐藏此按钮?但是这两个解决方案都不完美。 enter image description here

XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<ScrollView
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toTopOf="@id/submitButton"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_margin="0dp">
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

       <EditText /> goes here 
    </android.support.constraint.ConstraintLayout>
</ScrollView>
    <Button
        android:id="@+id/submitButton"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_margin="0dp"
        android:text="@string/wizard_singup_step_submit_button"
        style="@style/FormSubmitButton"

        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>

1 个答案:

答案 0 :(得分:1)

这可能会有所帮助,我自己还没有尝试过,请尝试将以下代码添加到清单中的activity标记中

编辑-添加了stateHidden以实现所需的功能,该按钮将位于底部,并且可以滚动滚动视图中的元素。

android:windowSoftInputMode="adjustPan|stateHidden"

来自Android Documentation- adjustPan-活动的主窗口未调整大小以为软键盘腾出空间。而是,窗口的内容会自动平移,以使当前焦点不会被键盘遮挡,并且用户始终可以看到他们正在键入的内容。通常,这不如调整大小那么可取,因为用户可能需要关闭软键盘才能到达窗口并与模糊的部分进行交互。

编辑2-用于计算键盘高度的代码

myLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

                @Override
                public void onGlobalLayout() {

                    Rect r = new Rect();
                    parent.getWindowVisibleDisplayFrame(r);

                    int screenHeight = parent.getRootView().getHeight();
                    int heightDifference = screenHeight - (r.bottom - r.top);
                    Log.d("Keyboard Size", "Size: " + heightDifference);

                }
            });

通过编程方式创建一个视图并设置其高度,以添加heightDifference

编辑3-

使用此按钮隐藏键盘

public static void hideKeyboardFrom(Context context, View view) {
    InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

让我知道是否可行。