Android N在TextAppearanceSpan中

时间:2016-08-30 18:38:36

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

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

编辑:如果我在我的主题中添加android:colorAccent以及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

3 个答案:

答案 0 :(得分: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添加到现有的输入类型。

答案 1 :(得分:2)

将支持库更新到25.0.0或更高版本可以解决此问题

答案 2 :(得分:1)

将其添加到“编辑”文本视图中 机器人:textAppearance = “@颜色/” 像这样:

<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>

它对我有用