【问题标题】:Android N crashes in TextAppearanceSpanAndroid N 在 TextAppearanceSpan 中崩溃
【发布时间】:2017-01-07 04:07:31
【问题描述】:

自从将我的 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

【问题讨论】:

  • 如果您可以创建一个重现问题的示例应用程序,file an issue
  • @CommonsWare 我终于可以重现了。它似乎与在 AppCompatEditText 之后创建 WebView 相关联。在那里提交的问题:code.google.com/p/android/issues/detail?id=221504.
  • 你解决了吗?它仍然发生在 25.3.1
  • @mbonnin 修复了吗?
  • @sanjeev 不确定,好久没查了

标签: android android-support-library android-7.0-nougat


【解决方案1】:

在堆栈跟踪中有一个对 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 添加到现有的输入类型。

【讨论】:

  • 是的,我暂时这样做了。不过,我真的不认为这是一个适当的解决方法。
  • 我在 Android M、N 和 O 中看到了这一点。它似乎不是特定于操作系统的版本。
  • Kitkat 在这里.. 也有问题.. 有人知道如何解决它吗?
【解决方案2】:

将此添加到您的编辑文本视图 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>

对我有用

【讨论】:

  • 我不知道为什么会这样,但似乎设置 TextAppearance 在带有 Android X 的 Android 10 中有效(如果你把它放在与 ArrayAdapter 一起使用的自动建议的 TextView 中。)你可以将它设置为一个自定义的@color,而不仅仅是这个 abc_ 值。它为我消除了崩溃!
【解决方案3】:

将支持库更新到 25.0.0 或更高版本可修复此问题

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多