Android EditText con errore TextInputLayout quando si raggiunge il limite di counterMaxLength dopo l’aggiornamento della libreria di supporto 23.2.0

Nella nostra app usiamo EditText con TextInputLayout per mostrare errori di validazione. Tutto ha funzionato bene fino all’aggiornamento all’ultima libreria di supporto com.android.support:design:23.2.0 . Dopo che questa app di aggiornamento ha iniziato a bloccarsi quando tenta di mostrare l’errore. Disposizione:

    

Codice:

  nameLayout.setError("Error); nameEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { nameLayout.setError(null); } } }); 

Errore:

  FATAL EXCEPTION: main Process: im.grouvi.app.debug, PID: 10704 java.lang.UnsupportedOperationException: Failed to resolve attribute at index 3: TypedValue{t=0x2/d=0x7f01010b a=2} at android.content.res.TypedArray.getColorStateList(TypedArray.java:482) at android.widget.TextView.setTextAppearance(TextView.java:2757) at android.support.design.widget.TextInputLayout.updateCounter(TextInputLayout.java:681) at android.support.design.widget.TextInputLayout.access$300(TextInputLayout.java:82) at android.support.design.widget.TextInputLayout$1.afterTextChanged(TextInputLayout.java:242) at android.widget.TextView.sendAfterTextChanged(TextView.java:8004) at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10165) at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1043) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:560) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:492) at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:491) at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:685) at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:445) at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:340) at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

MODIFICARE

Dopo ulteriori test. counterMaxLength in modo counterMaxLength solo quando raggiunge il set di caratteri massimo impostato in counterMaxLength

La versione 23.2.0 della libreria di progettazione ha introdotto Theme.Design.* Famiglia di temi che rispecchiano un sottoinsieme di temi AppCompat ma definiscono questo attributo su di esso:

 @color/design_textinput_error_color_light 

O hai il tuo tema estendere Theme.Design.* O copia la linea sopra al tuo tema.

L’attributo textColorError deve essere definito nel tema per poter utilizzare gli stati di errore in TextInputLayout . Altrimenti si romperà proprio come hai detto.

È ansible utilizzare il proprio valore del colore di errore, ovviamente.

I valori predefiniti sono @color/design_textinput_error_color_light per i temi chiari e @color/design_textinput_error_color_dark per i temi scuri.

Libreria di supporto 26.xx

Se utilizzi la versione 26+ della libreria di supporto, sembra che sia così

 ?attr/colorError 

per temi sia chiari che scuri.

È un bug che è già stato registrato qui. Non è stato risolto fino alla libreria di supporto alla progettazione 23.2.1. https://code.google.com/p/android/issues/detail?id=202051

Nel frattempo puoi utilizzare la soluzione menzionata da @Eugen.

Basta rimuovere lo stile che hai applicato a TextInputLayout. Ciò è dovuto alle differenze di temi di Luce e Oscurità. Ha funzionato per me.