2015-09-29 7 views
5

Chcę użyć TextInputLayout z moją nową aplikacją. Mam taki układTextInputLayout usuwa styl EditText po ustawieniu właściwości setError na null

*** 
    <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> 
*** 

Na mojej aktywności mam walidacji jak poniżej:

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; 
    } 

nie działa poprawnie. ale tak, jakbyś zauważył, że zadeklarowałem @ drawable/edit_text_border_radius zasób dla EditText. I jeśli po raz pierwszy nie wypełnię pola hasła, zmieni się kolor tła na czerwony. Ponieważ jest to domyślny kolor dla zakresu błędu TextInputLayout. Ale jeśli wypełnię to samo pole pewnymi wartościami, czerwony zakres błędu zniknie, ale element EditText zapomni o tym, że jest to zasób tła (@ drawable/edit_text_border_radius) ustawiony wcześniej.

+0

faktycznie gdzie ustawiasz zarówno kolor – Sree

+0

@Sree, przepraszam jakie kolory? – AEMLoviji

+0

mam na myśli czerwony i inny – Sree

Odpowiedz

2

Nie jestem pewien, czy znalazłeś rozwiązanie swojego problemu, ale właśnie wpadłem na ten sam problem.

Kopiowanie do źródła TextInputLayout, w szczególności logika usuwania komunikatu o błędzie, wygląda na to, że EditText usuwa filtr koloru tła (w moim przypadku był czarny).

Szybki i brudny roztwór mam wymyślić w tym czasie jest po prostu ręcznie zresetować filtr Tło do pożądanego koloru:

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

Awesome !!! to powinno być akceptowane +1 –

Powiązane problemy