TextInputEditText Сбой Исправления Орфографии?
У меня есть TextInputEditText, завернутый в TextInputLayout. Однако на некоторых клавиатурах, когда у пользователя есть предложение по правописанию и он нажимает на слово, чтобы отобразить всплывающий список предложений, мое приложение аварийно завершает работу, оставляя клавиатуру на экране, иногда поверх диалогового окна.
Это происходит на Android 6, 7 и 8. Samsung Samsung Galaxy S5 под управлением 6.0.1 и стоковая клавиатура Samsung, но не Gboard или Swype на том же устройстве, а на Nexus 5x под управлением Android 8.0 использует клавиатуру Google по умолчанию.
Приложение нацелено на 26 и использует библиотеку поддержки проектирования версии 26.1.0. Эта же трассировка стека была обнаружена для нас в нескольких версиях библиотеки поддержки, и эта или подобная проблема, как утверждается, была исправлена ранее.
Было довольно трудно отследить причину и воспроизвести ее. Я не устанавливаю никаких специальных тем или цветов - просто appcompat. Вот трассировка стека:java.lang.UnsupportedOperationException: Failed to resolve attribute at index 6: TypedValue{t=0x2/d=0x101009b a=1}
at android.content.res.TypedArray.getColorStateList(TypedArray.java:484)
at android.text.style.TextAppearanceSpan.<init>(TextAppearanceSpan.java:65)
at android.text.style.TextAppearanceSpan.<init>(TextAppearanceSpan.java:45)
at android.widget.Editor$SuggestionsPopupWindow$SuggestionInfo.<init>(Editor.java:3012)
at android.widget.Editor$SuggestionsPopupWindow$SuggestionInfo.<init>(Editor.java:3007)
at android.widget.Editor$SuggestionsPopupWindow.initContentView(Editor.java:2995)
at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:2844)
at android.widget.Editor$SuggestionsPopupWindow.<init>(Editor.java:2969)
at android.widget.Editor.showSuggestions(Editor.java:2229)
at android.widget.Editor$2.run(Editor.java:2109)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Вот похожие / связанные вопросы, которые я смог найти:
- Андроид Н падает в TextAppearanceSpan
- фатальное исключение: java.яз..UnsupportedOperationException: не удалось разрешить атрибут в индексе 6: TypedValue{t=0x2/d=0x101009b a=1}
- https://meta.stackexchange.com/questions/292199/android-app-crashes-when-tapping-on-red-underlined-by-the-spell-checker-text-w
К сожалению, кажется, что единственный обходной путь - это отключите предложения по правописанию для всех пользователей на полях TextInputEditText, что довольно неубедительно. Я открыт для других идей / предложений.
1 ответ:
В моем случае здесь я применил пользовательский textAppearance к родительскому TextInputLayout:
<android.support.design.widget.TextInputLayout android:textColorHint="@color/textColorPrimary" android:textColor="@color/textColorPrimary" android:theme="@style/smallHint" android:hint="@string/add_a_comment" android:layout_marginEnd="16dp"> <android.support.design.widget.TextInputEditText android:id="@+id/comment" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="12sp" android:inputType="textImeMultiLine|textCapSentences" android:importantForAutofill="noExcludeDescendants" tools:ignore="UnusedAttribute"/> </android.support.design.widget.TextInputLayout> </LinearLayout>
Определение темы выглядело следующим образом:
<style name="smallHint" parent="TextAppearance.AppCompat"> ... </style>
Это было неверно. Тема TextInputLayout не должна быть установлена на что-то с родителем TextAppearance.Совместимости приложений.
Вместо android: theme я должен был использовать app: hintextappearance.