Ошибка установки TextInputLayout без сообщения?

Можно ли установить ошибку в макете ввода текста без отображения сообщения об ошибке (я уже делаю это в другом месте)?

textinputlayout.setError("");

не будет работать к сожалению.

Что мне в основном нужно, так это textInputLayout, чтобы изменить цвет линии на красный, но мне нужно сделать это программно. Спасибо


person oxcened    schedule 12.03.2017    source источник
comment
Проверьте [stackoverflow.com/questions /40838069/   -  person RoHiT    schedule 13.03.2017
comment
спасибо, но я уже пробовал это, он предназначен только для редактирования текста без макета ввода текста   -  person oxcened    schedule 13.03.2017


Ответы (3)


Вы можете скрыть макет с ошибкой следующим образом:

textinputlayout.setError("");
if (textinputlayout.getChildCount() == 2) {
    textinputlayout.getChildAt(1).setVisibility(View.GONE);
}
person Ainege    schedule 25.08.2017
comment
Это может сломаться в любой момент. - person Miloš Černilovský; 08.12.2020
comment
Это действительно небезопасно - person Efimov Aleksandr; 06.08.2021

Надеюсь, еще не поздно, но код setError таков:

if (!mErrorEnabled) {
   if (TextUtils.isEmpty(error)) {
      // If error isn't enabled, and the error is empty, just return
      return;
   }
}

это означает, что простым обходным путем будет:

textinputlayout.setError(" ");

имейте в виду, что это сделает TextView с сообщением об ошибке видимым, поэтому TextInputLayout будет выше, даже если он будет пустым

поскольку это пропускает не очень хорошо продуманный случай обработки пустого запроса сообщения об ошибке.

person Simon    schedule 14.12.2017
comment
Хотя я не думаю, что этот случай непродуман, это может просто означать, что ошибка TextInputLayout должна была занимать место, и для этого она должна быть чем-то ненулевым или непустым - этот ответ должно получить больше голосов, поскольку решение более управляемо. - person devanshu_kaushik; 21.05.2020
comment
textinputlayout.setError(); это самое быстрое решение. Спасибо. - person Khang Tran; 11.03.2021

Текст ошибки (даже) займет/зарезервирует некоторую высоту в TextInputLayout. Если вы также хотите избавиться от него, то

<com.google.android.material.textfield.TextInputLayout      
    ...
    app:errorTextAppearance="@style/MyZeroSizeTextAppearance"
    ...
    >

Внешний вид текста:

<style name="MyZeroSizeTextAppearance">
    <item name="android:textSize">0sp</item>
</style>

а потом

textinputlayout.setError(" ");
person Max Diland    schedule 16.03.2021