3

我有一个 TextInputEditText 包装在 TextInputLayout 中。但是在某些键盘上,当用户有拼写建议并点击单词以显示建议的弹出列表时,我的应用程序会严重崩溃,使键盘留在屏幕上,有时会超出对话框。

这发生在 Android 6、7 和 8 上。我可以在运行 6.0.1 的三星 Galaxy S5 和普通的三星键盘上复制该问题,但不能在同一设备上复制 Gboard 或 Swype,在运行 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 字段上禁用所有用户的拼写建议,这很蹩脚。我对其他想法/建议持开放态度。

4

2 回答 2

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.AppCompat 父级的内容。

我应该使用 app:hintTextAppearance 而不是 android:theme。

于 2017-11-06T15:48:25.587 回答
0

对我来说,问题是

android:textAppearance="@style/TextAppearanceMedium"

设置为 AppCompatEditText

于 2019-03-18T13:55:22.493 回答