8

我有一些垂直線性佈局和一些輸入字段。使用TextInputLayout我使用標籤和內置錯誤消息獲得了很好的流。我的問題是當我添加和刪除錯誤消息。當刪除錯誤消息時,TextInputLayout的錯誤視圖不會被刪除

如果我添加一條錯誤消息,它位於編輯文本下面,一切都很好。

如果我用setError(null)刪除錯誤消息,則消息被刪除,但空間仍然存在。這顯然是每個Google的設計(見https://code.google.com/p/android/issues/detail?id=176005)。我非常喜歡這個空間,因爲它使UI看起來非常錯誤。

如果我.setErrorEnabled(false)視圖被刪除,一切看起來很正常。但是,如果用戶更改了數據,並且執行了另一個setError錯誤消息,則不會顯示(只有編輯文本行是紅色的)。

+0

您是否調用TextInputLayout或EditText的setError()方法? – Moinkhan

+0

textinputlayout上的所有內容。 – Gober

+0

嘗試在EditText上調用EditText的setError ... – Moinkhan

回答

20

從支持庫版本23.1.1(也許更早)開始,應該不再是這種情況。如果錯誤不爲空或空,您應該可以調用TextInputLayout.setErrorEnabled(false)來隱藏錯誤TextView,現在呼叫TextInputLayout.setError(error)在內部調用TextInputLayout.setErrorEnabled(true)。請參閱下面的代碼片段,取自支持庫:

public void setError(@Nullable CharSequence error) { 
    if (!mErrorEnabled) { 
     if (TextUtils.isEmpty(error)) { 
      // If error isn't enabled, and the error is empty, just return 
      return; 
     } 
     // Else, we'll assume that they want to enable the error functionality 
     setErrorEnabled(true); 
    } 
    ... 
} 
+1

謝謝。這現在效果更好。之前,我查找了TextInputLayout的子元素,並將可見性設置爲消失。現在你可以簡單地對新錯誤執行input.setError(..)並將input.setErrorEnabled(false)移除。來回工作。只是做input.setError(null)還是不錯的,但你不能全部擁有。 – Gober

+1

在我的情況下,我不得不同時做兩個input.setError(null)&input.setErrorEnabled(false)才能正常工作。 – User31689

+1

不幸的是它不適用於版本23.2.1。如果您查看方法的最開始部分,如果提供的錯誤字符串先前已設置,則返回: if(TextUtils.equals(mError,error)){ //如果我們已經有相同的錯誤,則忽略 return; } – Singed