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

时间:2016-08-01 13:30:42

标签: android android-7.0-nougat

我在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出现问题。我尝试删除&#34; StartingWindowTheme&#34;风格和应用程序现在可以工作,它不再崩溃。但我需要一个更好的解决办法。

修改2

所以我试图删除这一行:

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

它有效。似乎android:colorBackground就是问题。

TEMPORARY FIX

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

2 个答案:

答案 0 :(得分:2)

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

此行造成了问题:

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

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

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

答案 1 :(得分:0)

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

checking for path to top of build tree... /home/frank/.stack/programs/x86_64-linux/ghc-8.0.2.temp/ghc-8.0.2 Build platform inferred as: x86_64-unknown-linux Host platform inferred as: x86_64-unknown-linux Target platform inferred as: x86_64-unknown-linux GHC build : x86_64-unknown-linux GHC host : x86_64-unknown-linux GHC target : x86_64-unknown-linux checking for perl... /usr/bin/perl checking for a BSD-compatible install... /usr/bin/install -c checking whether ln -s works... yes checking for gsed... sed checking for gcc... /usr/bin/gcc checking for llc-3.7... no checking for llc... no checking for opt-3.7... no checking for opt... no checking for ld... /usr/bin/ld checking for gcc... /usr/bin/gcc checking whether the C compiler works... no configure: error: in /home/frank/.stack/programs/x86_64-linux/ghc-8.0.2.temp/ghc-8.0.2: configure: error: C compiler cannot create executables See `config.log' for more details 期望颜色不是可绘制的。