【问题标题】:TextInputLayout, setError increases heightTextInputLayout, setError 增加高度
【发布时间】:2023-12-31 08:30:01
【问题描述】:

我有一个简单的 TextInputLayout:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/tilPwd"
    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Passcode"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" >

    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:singleLine="true" />

</com.google.android.material.textfield.TextInputLayout>

那我下面还有其他看法。

问题是当我在 TextInputLayout 上设置错误时,高度会增加并推动下面的所有视图。 我尝试了设置空白 helperText 的解决方法,但是在对讲时会读取空白 helperText,这不是我想要的。

除了将 TextInputLayout 包装在具有设定高度的某个 ViewGroup 中之外,还有其他干净的解决方案吗?

【问题讨论】:

    标签: android accessibility android-textinputlayout


    【解决方案1】:

    经过一天的尝试,我居然找到了解决办法:

    public void setHelperTextEnabled (boolean enabled)
    

    此布局中是否启用了帮助文本功能。启用此功能 通过设置帮助消息之前的功能 setHelperText(CharSequence) 表示这个布局不会改变 显示帮助消息时的大小。

    基本上它预先占用了helperText的空间(即使没有设置),和错误占用的空间是一样的。

    值得注意的是,等效的 xml 属性“app:helperTextEnabled”并不能解决问题。

    【讨论】:

      【解决方案2】:

      是的,当你启用 TextInputLayout 的 error 属性时,它总是会增加 View 的高度来显示错误(无论何时发生),这会导致其他 Views/ViewGroups 进一步往下推。

      您可以通过编程设置错误来消除多余的空间。

      例如,每当发生错误时(或者如果您想设置错误),您可以调用

      setErrorEnabled(boolean value) 
      

      这样它也可以显示错误并将其他视图向下推(在它下面),如果错误消失了(或者你想隐藏错误),那么你可以调用

      setError("")
      

      这里需要传入一个空字符串,然后调用setErrorEnabled(false),这样textInputLayout就会回到原来的位置。

      【讨论】: