【问题标题】:Can't find ColorStateList from drawable resource ID only on Android Nougat仅在 Android Nougat 上无法从可绘制资源 ID 中找到 ColorStateList
【发布时间】:2016-12-06 14:45:30
【问题描述】:

我在我的 Crashlytics 中发现了这个错误,似乎只有使用 Android Nougat 预览版的用户才会崩溃。

应用程序在启动时崩溃(主活动)。

堆栈跟踪

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.domain/com.my.domain.activities.MainActivity}: android.content.res.Resources$NotFoundException: Can't find ColorStateList from drawable resource ID #0x7f020057
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
   at android.app.ActivityThread.-wrap12(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6077)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by android.content.res.Resources$NotFoundException: Can't find ColorStateList from drawable resource ID #0x7f020057
   at android.content.res.ResourcesImpl.loadColorStateList(ResourcesImpl.java:840)
   at android.content.res.Resources.loadColorStateList(Resources.java:998)
   at android.content.res.TypedArray.getColor(TypedArray.java:447)
   at android.app.Activity.onApplyThemeResource(Activity.java:4039)
   at android.view.ContextThemeWrapper.initializeTheme(ContextThemeWrapper.java:198)
   at android.view.ContextThemeWrapper.setTheme(ContextThemeWrapper.java:140)
   at android.app.Activity.setTheme(Activity.java:4009)
   at android.support.v7.app.AppCompatActivity.setTheme(AppCompatActivity.java:90)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2592)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
   at android.app.ActivityThread.-wrap12(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6077)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

Android Nougat 似乎不再支持我在应用中使用的某种系统颜色?但我不知道如何解决它。

编辑

所以我在 R 文件中找到了 ID 为 0x7f020057 的资源,就是这样:

public static final int background_splash_gradient=0x7f020057;

我检查了我在哪里使用它,它是:

<style name="StartingWindowTheme" parent="AppTheme">
    <item name="android:windowBackground">@drawable/background_splash_gradient</item>
    <item name="android:colorBackground">@drawable/background_splash_gradient</item>
</style>

这是 background_splash_gradiend xml 文件:

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<gradient
    android:angle="135"
    android:endColor="#00d49e"
    android:startColor="#00bcd4"/>

</shape>

我仍然不知道为什么这会导致 Nougat 出现问题。我尝试删除“StartingWindowTheme”样式并且应用程序现在可以工作,它不再崩溃。但我需要一个比这更好的解决方案。

编辑 2

所以我试图删除这一行:

<item name="android:colorBackground">@drawable/background_splash_gradient</item>

而且它有效。似乎android:colorBackground 是问题所在。

临时修复

由于问题出在上面提到的那一行,只在牛轧糖上,我创建了一个values-v24 文件夹并删除了那里的行。应用程序现在可以在 Nougat 上运行,但我希望有更好的解决方案。

【问题讨论】:

  • 你使用android.R.color的任何东西吗?
  • 嗯,其实我也不确定,我只是在全球范围内搜索“android.R.color”并没有找到任何东西。假设这是问题所在,那么解决方案是什么?
  • 其实,是的,好像我在xml中使用它。我正在使用“@android:color/transparent”
  • 其实既然你提到了它,你也许可以检查你的R文件并看到0x7f020057的变量名(即2130837591
  • 所以我在我的 R 文件中搜索了资源 0x7f020057,我发现 哪里 问题出在哪里,但我仍然不知道 why 那里是个问题。请查看我编辑的问题。

标签: android android-7.0-nougat


【解决方案1】:

我找到了问题所在以及如何解决它。这是解决方案,我会保持简单。

这行导致了问题:

<item name="android:colorBackground">@drawable/background_splash_gradient</item>

原来你不能在 XML 中将 drawable 设置为 colorBackground,所以删除这条线后它可以工作。

这只在 Nougat 上崩溃的原因是因为这在早期版本中是可能的。

【讨论】:

    【解决方案2】:

    原来according with the Android issue tracker,这是按预期工作的。

    android:colorBackground 期望颜色不是可绘制的。

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2019-02-07
      • 1970-01-01
      • 2020-02-12
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多