2015-12-23 13 views
6

Ho un TextInputLayout con un EditText al suo interno.Il colore dell'errore TextInputLayout non viene cancellato?

Questo è il mio xml:

<android.support.design.widget.TextInputLayout 
    android:id="@+id/textInputLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <EditText 
     android:id="@+id/editText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:hint="Enter Text" /> 

</android.support.design.widget.TextInputLayout> 

Il mio codice Java:

((TextInputLayout) findViewById(R.id.textInputLayout)).setError("ERROR"); 

Quando chiamo setError ("ERROR"), il e il colore dell'etichetta (suggerimento) e inferiore di EditText il colore della linea diventa rosso e viene visualizzato l'errore. Questo è il comportamento che mi aspetto.

Ora supponiamo che non chiami setError (null) prima di distruggere la mia attività. Ora apro di nuovo la stessa attività. Vedo che la linea di fondo rimane rossa per tutti i campi EditText all'interno della mia applicazione, anche se il colore dell'etichetta sembra essere resettato e il messaggio di errore viene eliminato. Questo non è sempre riproducibile, ma se continuo a provarlo, alla fine posso ottenerlo.

Sto utilizzando un Nexus 4 con 5.1.1.

Sto facendo qualcosa di sbagliato?

+0

Si dovrebbe ricreare il layout e non capisco perché si ottiene la linea rossa anche dopo aver distrutto l'attività. Puoi pubblicare un po 'più di codice? – Mangesh

+0

Hey amico, hai risolto questo. Anche il mio è lo stesso –

risposta

5

Ciò è dovuto a un errore nella libreria AppCompat.

Segnalato da elyess.a ... @ gmail.com, 19 Ottobre 2015 Utilizzando il supporto di progettazione biblioteca 23.1.0

Passaggi per riprodurre il problema (incluso il codice di esempio, se appropriato).

  • SetError su un TIL (cioè in una forma)
  • La TIL ha una sottolineatura rossa (ok)
  • navigare avanti e inserire di nuovo l'attività. Oppure vai a un'altra attività con TIL.

Che cosa è successo.

  • Tutti i TIL hanno una sottolineatura rossa, anche in altre attività. (ma nessun testo di errore).
  • Le sottolineature rosse scompaiono solo dopo aver forzato la chiusura dell'app.

riportato anche qui:


questione dello status è stato cambiato in FutureRelease il 11 Nov 2015, in modo che possiamo sperare in una correzione in arrivo.

Nel frattempo, sembra che ci sono 3 soluzioni:

0

Questo problema è stato risolto nella versione 23.1.1 del com.android.support: ... librerie

0

Come ha detto @Richard, si tratta di un bug. Issue 190829: TextInputLayout setError causes all TILs in the app to have red underline

Ho utilizzato la soluzione di impostare lo stato costante sullo sfondo. Si può solo estendere il TextInputLayout con il proprio classe personalizzata dove l'override del metodo setError():

public class CustomTextInputLayout extends TextInputLayout { 

    // Constructors... 

    @Override 
    public void setError(@Nullable CharSequence error) { 

     super.setError(error); 
     if ((getEditText() != null && getEditText().getBackground() != null) && 
      (Build.VERSION.SDK_INT == 22 || Build.VERSION.SDK_INT == 21)) { 
      Drawable drawable = getEditText().getBackground().getConstantState().newDrawable(); 
      getEditText().setBackgroundDrawable(drawable); 
     } 
    } 
} 

e poi sono riutilizzando questa classe per il confezionamento EditTexts. Non ho avuto effetti collaterali.

Problemi correlati