Android: TextInputEditText 的底部总是滚动到软键盘的顶部
Android: bottom of TextInputEditText always scrolling to top of softkeyboard
-
android
-
android-textinputlayout
-
android-nestedscrollview
-
android-textinputedittext
-
material-components-android
我在 NestedScrollView 中的 TextInputLayout 中使用 TextInputEditText:
<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 的垂直度 space 比软键盘上方可用的文本多,TextInputEditText 的上部滚出视图。
这很好。
但是,如果我手动向上滚动 nestedScrollView 以便我可以编辑 TextInputEditText 的第一个单词,它会一直向后滚动,并且每当我单击(= 设置光标)进入 TextInputEditText 或输入字母时都会发生这种情况.
每次我与之交互时,TextInputEditText 的底部边缘似乎都与软键盘的顶部边缘对齐,这就是为什么即使将光标放在最开始时,顶部边缘也会滚动出视图。
这使得无法编辑长字符串的开头,因为您必须在每个字母后向上滚动并查看会发生什么,或者您必须盲目键入。
我该如何解决这个问题?
重现步骤:
- 输入长文本
- 滚动到文本的开头
- 将光标置于 TextInputEditText 的开头
- 再次滚动到文本的开头,以便光标可见:
cursor at the beginning of the TextInputEditText
- 输入字母:
cursor no longer visible, because scrolled out of view
在清单文件的 activity 标记中添加此行:
android:windowSoftInputMode="adjustPan"
此外,您可以在 XML 上的 TextInputEditText 中为光标上色和手动图像。
我也被这个难住了好久。关键是将以下内容添加到您的 TextInputEditText
app:textInputLayoutFocusedRectEnabled="false"
如此处所述:
android
android-textinputlayout
android-nestedscrollview
android-textinputedittext
material-components-android
我在 NestedScrollView 中的 TextInputLayout 中使用 TextInputEditText:
<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 的垂直度 space 比软键盘上方可用的文本多,TextInputEditText 的上部滚出视图。 这很好。
但是,如果我手动向上滚动 nestedScrollView 以便我可以编辑 TextInputEditText 的第一个单词,它会一直向后滚动,并且每当我单击(= 设置光标)进入 TextInputEditText 或输入字母时都会发生这种情况.
每次我与之交互时,TextInputEditText 的底部边缘似乎都与软键盘的顶部边缘对齐,这就是为什么即使将光标放在最开始时,顶部边缘也会滚动出视图。
这使得无法编辑长字符串的开头,因为您必须在每个字母后向上滚动并查看会发生什么,或者您必须盲目键入。
我该如何解决这个问题?
重现步骤:
- 输入长文本
- 滚动到文本的开头
- 将光标置于 TextInputEditText 的开头
- 再次滚动到文本的开头,以便光标可见: cursor at the beginning of the TextInputEditText
- 输入字母: cursor no longer visible, because scrolled out of view
在清单文件的 activity 标记中添加此行:
android:windowSoftInputMode="adjustPan"
此外,您可以在 XML 上的 TextInputEditText 中为光标上色和手动图像。
我也被这个难住了好久。关键是将以下内容添加到您的 TextInputEditText
app:textInputLayoutFocusedRectEnabled="false"
如此处所述: