Я использую 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 выравнивается с верхним краем программной клавиатуры каждый раз, когда я взаимодействую с ней, поэтому верхний край прокручивается вне поля зрения, даже когда курсор находится в самом начале.
Это делает невозможным редактирование начала длинной строки, потому что вам нужно прокручивать вверх после каждой буквы и смотреть, что происходит, или вы должны печатать вслепую.
Как я могу обойти это?
Действия по воспроизведению:
- введите длинный текст
- перейти к началу текста
- поместите курсор в начало TextInputEditText
- прокрутите еще раз до начала текста, чтобы курсор был виден: курсор в начале TextInputEditText< /а>
- введите буквы: курсор больше не виден, потому что прокручивается вне поля зрения