我有一个包含在TextInputLayout中的TextInputEditText。但是在某些键盘上,当用户有拼写建议,并点击该单词以显示弹出的建议列表时,我的应用程序崩溃,将键盘留在屏幕上,有时会超出对话框。
这在Android 6,7和8上发生。 我可以使用运行6.0.1的三星Galaxy S5和三星键盘,但不能在同一设备上使用Gboard或Swype,以及使用默认Google键盘在运行Android 8.0的Nexus 5x上复制此问题。
应用程序目标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)
以下是我能找到的类似/相关问题:
不幸的是,似乎唯一的解决方法是禁用TextInputEditText字段上所有用户的拼写建议,这非常蹩脚。我对其他想法/建议持开放态度。
答案 0 :(得分:0)
就我的情况而言,我已将自定义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.AppCompat父级的内容。
而不是android:theme,我应该使用app:hintTextAppearance。
答案 1 :(得分:0)
对我来说,问题是
android:textAppearance="@style/TextAppearanceMedium"
设置为AppCompatEditText