android - 仅在 Android Nougat 上无法从可绘制资源 ID 中找到 ColorStateList

标签 android android-7.0-nougat

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

应用在启动时崩溃(主 Activity )。

堆栈跟踪

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 是问题所在。

临时修复

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

最佳答案

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

这一行导致了问题:

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

事实证明你不能在 XML 中将 drawable 设置为 colorBackground,所以在删除这一行后它可以工作。

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

关于android - 仅在 Android Nougat 上无法从可绘制资源 ID 中找到 ColorStateList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700220/

相关文章:

android - 使用 GDB 调试 Android native 代码非常慢

Android Nougat 忽略位于 res/values-zh-rTW 中的字符串资源

Android 警报管理器在重启设备或从后台终止应用程序后取消

php - FCM 成功但 android 设备未收到通知

Android DatePicker 日期限制

android - 在 Android 7.0 中触摸时微调器滚动到默认选择

android - Android App在长时间闲置时不断崩溃(API 24和23)

牛轧糖上的 android.os.TransactionTooLargeException

android.os.FileUriExposedException : file:///storage/emulated/0/test. txt 通过 Intent.getData() 暴露在应用之外

java - Android countDownTimer - 使 millisUntilFinished float