无法以编程方式更改 TextInputLayout 提示引力
Unable to change TextInputLayout hint gravity programmatically
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 中提示的重力更改为开始|顶部以编程方式。
'programmatically' 部分很重要,因为我将此 TextInputLayout+TextInputEditText 重复用于需要提示文本不同位置的多个用例。
在 XML #1 的情况下,提示将保留在那里,因为以下 2 行不起作用:
Activity代码:
inputTextField.gravity = Gravity.START or Gravity.TOP
textInputLayout.gravity = Gravity.START or Gravity.TOP
在 XML #2 的情况下,这完美地工作并且提示移动到顶部:
Activity代码:
inputTextField.gravity = Gravity.START or Gravity.TOP
为什么 XML #1 的提示没有以编程方式移动?
期望的结果:
在布局中可以使用 android:gravity="top"
在 TextInputEditText
:
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
...>
<com.google.android.material.textfield.TextInputEditText
android:gravity="top"
..>
您可以以编程方式使用:
textinputlayout.getEditText().setGravity(Gravity.TOP);
它需要版本 1.2.0-alpha06
。
最后一点。
目前使用 FilledBox
样式只能将 android:minLines
添加到 2 或更大到 TextInputEditText
.
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 中提示的重力更改为开始|顶部以编程方式。
'programmatically' 部分很重要,因为我将此 TextInputLayout+TextInputEditText 重复用于需要提示文本不同位置的多个用例。
在 XML #1 的情况下,提示将保留在那里,因为以下 2 行不起作用:
Activity代码:
inputTextField.gravity = Gravity.START or Gravity.TOP
textInputLayout.gravity = Gravity.START or Gravity.TOP
在 XML #2 的情况下,这完美地工作并且提示移动到顶部:
Activity代码:
inputTextField.gravity = Gravity.START or Gravity.TOP
为什么 XML #1 的提示没有以编程方式移动?
期望的结果:
在布局中可以使用 android:gravity="top"
在 TextInputEditText
:
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
...>
<com.google.android.material.textfield.TextInputEditText
android:gravity="top"
..>
您可以以编程方式使用:
textinputlayout.getEditText().setGravity(Gravity.TOP);
它需要版本 1.2.0-alpha06
。
最后一点。
目前使用 FilledBox
样式只能将 android:minLines
添加到 2 或更大到 TextInputEditText
.