TextInputLayout,setError 会增加高度

3

我有一个简单的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,但是在talkback模式下,空的helperText将被读取,这不是我想要的。

有没有一种清洁的解决方案,而不是将TextInputLayout包装在某个具有固定高度的ViewGroup中?

3个回答

2

经过一天的尝试,我终于找到了解决方案:

public void setHelperTextEnabled (boolean enabled)

这个布局中是否启用了辅助文本功能。在通过setHelperText(CharSequence)设置辅助消息之前启用此功能将意味着在显示辅助消息时,此布局不会改变大小。
基本上它预先占用了helperText的空间(即使没有设置),并且错误占用了相同的空间。
值得注意的是,等效的xml属性“app:helperTextEnabled”无法解决此问题。

1

当您启用TextInputLayout的错误属性时,它将始终增加视图的高度以显示错误(无论何时发生),这将导致其他视图/视图组向下推。您可以通过编程方式设置错误来消除额外的空间。

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

setErrorEnabled(boolean value) 

这样可以显示错误并将其他视图向下推(在它下面的视图),如果错误消失(或者想要隐藏错误),则可以调用相关函数。

setError("")

在需要传递空字符串并调用setErrorEnabled(false)的地方,这样textInputLayout就会恢复到其原始位置。


0

我曾经遇到过相同的问题,通过添加这个XML属性解决了它。

app:errorEnabled="true"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接