Мягкая клавиатура нажала на кнопку над ней.Как это исправить? - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть ConstraintLayout с ScorllView и кнопкой под ним (прикрепленной к нижней части экрана. Когда я редактирую ввод EditText внутри ScrollView. Затем появляется клавиатура, которая перемещает содержимое моего 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 голосов
/ 18 декабря 2018

Это может помочь, не пробовал сам, попробуйте добавить приведенный ниже код к вашему тегу activity в вашем манифесте

Изменить - добавлено stateHidden для достижения того, что вы ищете,кнопка будет внизу, а элементы внутри прокрутки можно прокручивать.

android:windowSoftInputMode="adjustPan|stateHidden"

Из Документация Android - 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);
}

Дайте мне знать, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...