我有一个这样的TextInputLayout:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="200dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputLayoutEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="200dp"
android:gravity="top" />
</com.google.android.material.textfield.TextInputLayout>
此 TextInputLayout 的高度是动态的,例如,当写入更多文本时,高度会增大。因此,在高度变得大于屏幕的情况下,并且需要滚动才能看到 TextInputLayout 的第一行,则写作焦点存在问题。当一直写在顶部时,屏幕焦点将一直到底部,而光标仍在顶部。这使我无法看到顶部正在写入的内容,因为屏幕正在滚动到TextInputLayout的底部。有时焦点会回到顶部,几乎就像一个小故障闪烁。
在底部书写正常,因为底部屏幕焦点始终是优先的。当 TextInputLayout 的高度尚未超过屏幕时,在顶部书写也可以正常工作,因为无需滚动。
是否需要在 TextInputLayout 中设置属性,以使屏幕聚焦于我正在书写的位置?
更新 1:
它似乎与键盘始终位于文本输入布局底部的正下方有关。因此,在打字时,键盘将始终希望位于底部,而在顶部书写只会将屏幕焦点一直拉到放置键盘的底部。
防止键盘在 TextInputLayout 下修复的一种方法是在活动 (AndroidManifest.xml( 中设置以下内容:
android:windowSoftInputMode="adjustPan"
这将防止键盘需要向上强制布局以使其适合。这将解决我在写作时被"一路向下拉"的问题,即使我一直在顶部书写,由于高度大而看不到底部。但。。。像这样修复键盘会阻止我看到我在底部写的内容,因为键盘会阻止我正在写的内容。所以理想情况下,我仍然希望键盘自动在底部为键盘腾出空间,同时我不希望键盘将屏幕焦点一直拉下来。
更新 2(已解决(:
我设法解决了这个问题,解决方案可以在下面的回答中看到。
TL;DR中,在 TextInputEditText 中添加以下内容:
app:textInputLayoutFocusedRectEnabled="false"
在尝试了许多TextInputLayout的属性之后,我设法找到了解决方案。关键是在 TextInputEditText 中将 app:textInputLayoutFocusedRectEnabled 设置为 false:
app:textInputLayoutFocusedRectEnabled="false"
这将使我使用TextInputLayout实现我想要的东西成为可能,即:
- 能够在根据输入长度增长的文本输入布局中写入文本。
- 能够在输入字段中的任何位置书写(在文本很长的情况下(,并且不会一直向下拖动到底部,因为键盘正试图放置在 TextInputLayout 下方。(或者它也可以看起来像是"故障",通过将屏幕拉到TextInputLayout的中间或从您正在写作的地方一直拉到底部。就像屏幕在您键入的每个字符上上下滚动得非常快一样。
- 能够将键盘放在整个 TextInputLayout 中的任何位置,以及 TextInputLayout 的正下方,就好像键盘正在向上推整个布局一样。
希望这个问题的答案能够帮助其他寻找我遇到的特定问题的人!
将maxLines
属性添加到TextInputEditText
inputType
并将属性设置为textMultiLine
,如下所示:
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/tiet_hisab_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
android:hint="@string/details"
android:inputType="textAutoCorrect|textMultiLine|textAutoComplete"
android:textAppearance="@style/TextAppearance.AppCompat.Small" />