XML #1 - TextInputLayout 内的 TextInputEditText:
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="148dp"
android:hint="Enter your email"
app:boxStrokeColor="#000000"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputTextField"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="start|center_vertical" />
</com.google.android.material.textfield.TextInputLayout>
XML #2 - 只有一个简单的 TextInputEditText(不包含在 TextInputLayout 中):
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputTextField"
android:layout_width="0dp"
android:layout_height="200dp"
android:hint="Password"
android:gravity="top"
android:ellipsize="end"
android:inputType="textMultiLine"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
我要做的就是将 TextInputLayout 中提示的重力更改为 start|top programmatically。
“以编程方式”部分很重要,因为我将这个 TextInputLayout+TextInputEditText 重用于需要不同位置的提示文本的多个用例。
在 XML #1 的情况下,提示将保留在那里,因为以下 2 行不起作用:
活动代码:
inputTextField.gravity = Gravity.START or Gravity.TOP
textInputLayout.gravity = Gravity.START or Gravity.TOP
在 XML #2 的情况下,这可以完美运行,并且提示移到顶部:
活动代码:
inputTextField.gravity = Gravity.START or Gravity.TOP
为什么提示不以编程方式移动到 XML #1?