2015-09-29 102 views
5

我想將TextInputLayout與我的新應用程序一起使用。我有這樣的佈局TextInputLayout在將setError屬性設置爲null後刪除EditText樣式

*** 
    <android.support.design.widget.TextInputLayout 
     android:id="@+id/input_layout_email" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="8dp" 
     android:textColorHint="@color/text_color" 
     app:hintTextAppearance="@style/HintTextAppearance.TextInputLayout" 
     app:errorTextAppearance="@style/ErrorTextAppearance.TextInputLayout"> 

     <EditText 
      android:id="@+id/input_email" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textEmailAddress" 
      android:hint="@string/hint_email" 
      android:background="@drawable/edit_text_border_radius" 
      android:padding="10dp" 
      android:drawableLeft="@drawable/ic_acc"/> 
    </android.support.design.widget.TextInputLayout> 
*** 

在我的活動我有如下驗證:

private boolean validatePassword() { 
      if (inputPassword.getText().toString().trim().isEmpty()) { 
       inputLayoutPassword.setError(getString(R.string.err_msg_password)); 
       requestFocus(inputPassword); 
       return false; 
      } else { 
       inputLayoutPassword.setError(null);// it removes @drawable/edit_text_border_radius style from EditText 
       inputLayoutPassword.setErrorEnabled(false);  
      } 

      return true; 
    } 

不能夠正常工作。但好像你注意到我已經爲EditText聲明瞭@ drawable/edit_text_border_radius資源。如果第一次我不填充密碼字段,它會將其背景顏色更改爲紅色。因爲它是TextInputLayout錯誤跨度的默認顏色。但是,如果我填充相同的字段與一些值然後紅色的錯誤跨度消失,但EditText元素忘記它是背景資源(@ drawable/edit_text_border_radius)設置它之前。

+0

實際上你在哪裏設置這兩個顏色 – Sree

+0

@Sree,對不起哪種顏色? – AEMLoviji

+0

我的意思是紅色和另一個 – Sree

回答

2

不知道您是否找到了解決問題的方法,但我遇到了同樣的問題。

挖掘到的TextInputLayout源,尤其是在清除錯誤消息的邏輯,它看起來像EditText得到它的背景顏色過濾器清除(對我來說,這是變黑)。

快速和骯髒的解決方案,我在平均時間拿出是剛剛手動復位背景過濾器所需顏色:

private boolean validatePassword() { 
    if (inputPassword.getText().toString().trim().isEmpty()) { 
     inputLayoutPassword.setError(getString(R.string.err_msg_password)); 
     requestFocus(inputPassword); 
     return false; 
    } else { 
     inputLayoutPassword.setError(null);// it removes @drawable/edit_text_border_radius style from EditText 
     inputLayoutPassword.setErrorEnabled(false); 

     // manually resetting the background color filter of edit text 
     if(inputLayoutPassword.getEditText() != null) { 
      if(inputLayoutPassword.getEditText().getBackground() != null) { 
       inputLayoutPassword.getEditText() 
        .getBackground() 
        .setColorFilter(
         ContextCompat.getColor(getActivity(), R.color.some_color), 
         PorterDuff.Mode.SRC_IN 
        ); 
      } 
     } 
    } 

    return true; 
} 
+0

太棒了!這應該被接受+1 –