仅在Android Nougat上找不到可绘制资源ID的ColorStateList

问题描述 投票:7回答:2

我在我的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>

我仍然不知道为什么这会引起牛轧糖问题。我尝试删除“StartingWindowTheme”样式,应用程序现在可以正常工作,它不再崩溃。但我需要一个更好的解决方案。

编辑2

所以我试图删除这一行:

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

它有效。好像android:colorBackground就是问题所在。

临时修复

由于问题出现在上面提到的行中,只有在Nougat上,我创建了一个values-v24文件夹并删除了那里的行。 App现在适用于Nougat,但我希望有更好的解决方案。

android android-7.0-nougat
2个回答
2
投票

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

这条线导致了这个问题:

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

事实证明,你无法在XML中将drawable设置为colorBackground,因此在删除此行后它可以正常工作。

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


0
投票

事实证明,according with the Android issue tracker,这是按照预期的方式工作。

android:colorBackground希望颜色不是抽象的。

© www.soinside.com 2019 - 2024. All rights reserved.