TextInputEditText 拼写纠正崩溃?

3
我有一个TextInputLayout包装的TextInputEditText。然而,在某些键盘上,当用户有拼写建议并点击单词以显示建议弹出列表时,我的应用程序会崩溃,留下键盘在屏幕上,有时会覆盖对话框。
这种情况发生在Android 6、7和8上。我可以使用三星Galaxy S5运行6.0.1和股票三星键盘复制问题,但在同一设备上不使用Gboard或Swype,以及在运行默认Google键盘的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字段上的拼写建议,这相当糟糕。如果有其他想法/建议,请告诉我。


我的主题扩展了Theme.AppCompat.Light.DarkActionBar。 我已经尝试过Theme.AppCompat.Light、Theme.AppCompat、Theme.Design和Theme.Design.Light,但在所有这些主题中都会发生崩溃。 - Mark
请参考以下解决方案:https://dev59.com/J1gR5IYBdhLWcg3wGaOb,您无需禁用文本建议。 - Mr-IDE
@Mr-IDE,这并没有任何有助于解决这个特定问题的东西(至少在我的情况下是这样)。正如我在答案中指出的那样,这是由于将TextApperance.AppCompat应用为样式的父级,并将其用作主题,而不是hintTextAppearance所导致的。 - Mark
3个回答

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>

主题定义如下:

The theme definition looked like this:

<style name="smallHint" parent="TextAppearance.AppCompat">
  ...
</style>

这不是正确的做法。TextInputLayout的主题不应该被设置为TextAppearance.AppCompat的父级。
我应该使用app:hintTextAppearance,而不是android:theme。

有同样的问题.. 如何在不使用android:theme的情况下使用colorControlActivated和colorColorControlNormal? 有什么建议吗? - sanjeev

0

我遇到了同样的问题。我能够将android:theme保留为我的自定义样式,但将该样式的父级从TextAppearance.AppCompat切换到Widget.Design.TextInputLayout。溢出建议菜单可以正常工作,并且我能够保持我想要的样式。


0
对我来说,问题是这样的
android:textAppearance="@style/TextAppearanceMedium"

设置为AppCompatEditText


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接