Android N在TextAppearanceSpan中崩溃

12
自从我将Nexus 5X升级到Android N后,使用EditText时出现以下崩溃:
   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:528)
       at android.text.style.TextAppearanceSpan.<init>(TextAppearanceSpan.java:65)
       at android.text.style.TextAppearanceSpan.<init>(TextAppearanceSpan.java:45)
       at android.widget.Editor$SuggestionsPopupWindow.setUp(Editor.java:3316)
       at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:3016)
       at android.widget.Editor$SuggestionsPopupWindow.<init>(Editor.java:3309)
       at android.widget.Editor.replace(Editor.java:356)
       at android.widget.Editor$3.run(Editor.java:2129)
       at android.os.Handler.handleCallback(Handler.java:751)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:154)
       at android.app.ActivityThread.main(ActivityThread.java:6077)
       at java.lang.reflect.Method.invoke(Native Method)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

当单击已经有文本的EditText时,会出现这种情况。我猜测这是自动更正弹出窗口或类似的东西。
我的应用程序使用支持库24.2.0和Theme.AppCompat.Light.NoActionBar。
编辑:如果我在主题中除了colorAccent之外还添加了android:colorAccent,它就可以正常工作了。
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/mainBrandColor</item>
    <item name="colorPrimaryDark">@color/mainBrandDarkerColor</item>
    <item name="colorAccent">@color/mainBrandColor</item>
    <item name="android:colorAccent">@color/mainBrandColor</item>
</style>

但这不应该是必需的,因为我继承自Theme.AppCompat。
我制作了一个展示问题的小应用程序:

https://github.com/martinbonnin/TextAppearanceSpanCrash/blob/master/app/src/main/java/mbonnin/com/textappearancescancrash/MainActivity.java


如果您能创建一个可以重现问题的示例应用程序,请提交问题 - CommonsWare
1
@CommonsWare 我终于可以重现了。看起来与在 AppCompatEditText 之后创建 WebView 有关。问题已在此处提交:https://code.google.com/p/android/issues/detail?id=221504。 - mbonnin
你解决了吗?它在25.3.1上仍然发生。 - LucioB
@mbonnin 修好了吗? - sanjeev
@sanjeev 不确定,我已经很久没有检查了。 - mbonnin
3个回答

8

在堆栈跟踪中,有一个对SuggestionsPopupWindow的引用,让我想到要禁用EditText的建议功能。

我使用以下代码作为解决方法:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        if ((editText.getInputType() & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) != InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) {
            editText.setInputType(editText.getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
        }
    }

我们也可以在XML中设置inputType,但上述代码允许我们将TYPE_TEXT_FLAG_NO_SUGGESTIONS添加到现有的输入类型中。

是的,我暂时这样做了。但我并不认为这是一个适当的解决方案。 - mbonnin
我在Android M、N和O中看到了这个问题。它似乎不是特定于操作系统版本的。 - Mark
Kitkat在这里.. 这个也有问题.. 有人有修复的想法吗? - sanjeev

2

将支持库更新至25.0.0或更高版本即可解决此问题。


2
将以下代码添加到您的EditText视图中 android:textAppearance="@color/" 就像这样:
<EditText 
      android:textAppearance="@color/abc_primary_text_disable_only_material_dark"
      ...
/>

"

@color/abc_primary_text_disable_only_material_dark

"(内置):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/bright_foreground_disabled_material_dark"/>
    <item android:color="@color/bright_foreground_material_dark"/>
</selector>

它对我有效


我不知道为什么这样可以,但在Android 10 w/Android X中设置TextAppearance似乎是有效的(如果您将其放置在与ArrayAdapter一起使用的自动建议的TextView中)。您可以将其设置为自定义@color,而不仅仅是abc_值。这对我来说消除了崩溃! - fattire

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