Android EditText с отключением TextInputLayout при достижении предела counterMaxLength после обновления библиотеки поддержки 23.2.0

20

В нашем приложении мы используем EditText с TextInputLayout , чтобы показать ошибки проверки. Все работало нормально, пока мы не обновились до последней библиотеки поддержки com.android.support:design:23.2.0 . После этого приложение для обновления начало сбоя, когда оно пытается показать ошибку.  Компоновка:

<android.support.design.widget.TextInputLayout
android:id="@+id/name_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:counterEnabled="true"
app:counterMaxLength="100"
>

<EditText
android:id="@+id/name_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/group_name"
android:inputType="textMultiLine|textCapWords"
android:textSize="16sp"/>
</android.support.design.widget.TextInputLayout>

код:

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

Ошибка:

    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.access0(TextInputLayout.java:82)
    at android.support.design.widget.TextInputLayout.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)

ИЗМЕНИТЬ

После тестирования. Он падает только тогда, когда он достигает максимального знака ввода, установленного в counterMaxLength

    
задан Rafael Muhamedzyanov 03.03.2016 в 09:45
источник
  • В Android Studio gradle отображается подсказка номера последних библиотек. Таким образом, его правильный 23.2.0 –  Rafael Muhamedzyanov 03.03.2016 в 09:57

3 ответа

39

В версии 23.2.0 библиотеки дизайна представлено Theme.Design.* семейств тем, которые отражают подмножество тем AppCompat, но определяют этот атрибут поверх него:

<item name="textColorError">@color/design_textinput_error_color_light</item>

Либо ваша тема расширяет Theme.Design.* или копирует приведенную выше строку в вашу тему.

Атрибут textColorError должен быть определен в вашей теме, чтобы использовать ошибки в TextInputLayout . В противном случае он рухнет так, как вы упомянули.

Конечно, вы можете использовать собственное значение цвета ошибки.

Значения по умолчанию: @color/design_textinput_error_color_light для светлых тем и @color/design_textinput_error_color_dark для темных тем.

Библиотека поддержки 26.x.x

Если вы используете библиотеку поддержки версии 26+, она выглядит как

<item name="textColorError">?attr/colorError</item>

для светлых и темных тем.

    
ответ дан Eugen Pechanec 03.03.2016 в 10:16
источник
  • Теперь он работает. Благодарим вас за подробный ответ. –  Rafael Muhamedzyanov 03.03.2016 в 10:26
  • У меня была такая же проблема, и это решило ее. Я использовал решение для реализации textColorError в моей теме. –  Sandra 28.06.2016 в 14:10
2

Это ошибка, которая уже записана здесь. Его не удалось решить до 23.2.1 библиотеки поддержки дизайна. Ссылка

Между тем вы можете использовать решение, упомянутое @Eugen.

    
ответ дан Irfan Raza 23.06.2016 в 04:25
источник
0

Просто удалите стиль, который вы применили к TextInputLayout. Это связано с различиями в свете и темной теме. Это работает для меня.

    
ответ дан Phani varma 01.08.2017 в 10:25
источник