Android: нижняя часть TextInputEditText всегда прокручивается вверх программной клавиатуры

Я использую TextInputEditText внутри TextInputLayout, который находится внутри NestedScrollView:

<androidx.core.widget.NestedScrollView
    android:id="@+id/nsv"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/toolbar">

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:orientation="vertical">

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textField"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@{hint}"
            android:padding="@dimen/padding_items"
            app:startIconContentDescription="@{iconDescription}"
            app:startIconDrawable="@{icon}">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/et"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:importantForAutofill="no"
                android:text="@={text}" />
        </com.google.android.material.textfield.TextInputLayout>
    </LinearLayout>
</androidx.core.widget.NestedScrollView>

Когда я ввожу длинный текст, так что TextInputEditText занимает больше места по вертикали, чем доступно над программной клавиатурой, верхняя часть TextInputEditText прокручивается из поля зрения. Это прекрасно.

Но если я вручную прокручиваю вложенныйScrollView, чтобы редактировать первые слова TextInputEditText, он все время прокручивается назад, и это происходит всякий раз, когда я нажимаю (= устанавливаю курсор) в TextInputEditText или ввожу букву.

Кажется, что нижний край TextInputEditText выравнивается с верхним краем программной клавиатуры каждый раз, когда я взаимодействую с ней, поэтому верхний край прокручивается вне поля зрения, даже когда курсор находится в самом начале.

Это делает невозможным редактирование начала длинной строки, потому что вам нужно прокручивать вверх после каждой буквы и смотреть, что происходит, или вы должны печатать вслепую.

Как я могу обойти это?

Действия по воспроизведению:

  1. введите длинный текст
  2. перейти к началу текста
  3. поместите курсор в начало TextInputEditText
  4. прокрутите еще раз до начала текста, чтобы курсор был виден: курсор в начале TextInputEditText< /а>
  5. введите буквы: курсор больше не виден, потому что прокручивается вне поля зрения

comment
попробуйте использовать простой вид прокрутки вместо вложенного.   -  person ahmad bajwa    schedule 26.02.2021
comment
к сожалению не получилось; использование ScrollView вместо NestedScrollView приводит к тому же поведению   -  person ReWa EUSA    schedule 26.02.2021


Ответы (1)


добавьте эту строку в тег активности в файле манифеста:

android:windowSoftInputMode="adjustPan"

Кроме того, вы можете раскрашивать и вручную отображать курсор в TextInputEditText на XML.

person Muhammad Asad    schedule 26.02.2021
comment
Спасибо за быстрый ответ и подсказку. К сожалению, ошибка сохраняется; любые другие идеи? - person ReWa EUSA; 26.02.2021