【问题标题】:Unable to change TextInputLayout hint gravity programmatically无法以编程方式更改 TextInputLayout 提示重力
【发布时间】:2020-05-13 15:26:49
【问题描述】:

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 以编程方式

“以编程方式”部分很重要,因为我将这个 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 的提示没有以编程方式移动?

期望的结果:

【问题讨论】:

    标签: android android-layout android-textinputlayout material-components textinputlayout


    【解决方案1】:

    在布局中你可以在TextInputEditText中使用android:gravity="top"

    <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 添加到TextInputEditText 的2 或更大。

    【讨论】:

    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    相关资源
    最近更新 更多