2016-08-01 18 views
7

Tôi đã tìm thấy lỗi này trong Crashlytics của mình và có vẻ như nó chỉ gặp sự cố đối với người dùng có phiên bản xem trước của Android Nougat.Không thể tìm thấy ColorStateList từ ID tài nguyên có thể kéo chỉ trên Android Nougat

Trục trặc ứng dụng khi khởi động (Hoạt động chính).

stacktrace

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) 

Dường như Android Nougat không còn hỗ trợ một số loại màu sắc hệ thống mà tôi đang sử dụng trong ứng dụng của tôi? Nhưng tôi không biết chính xác cách sửa nó.

Sửa

Vì vậy, tôi tìm thấy tài nguyên với ID 0x7f020057 trong tập tin R của tôi và đây là nó:

public static int thức background_splash_gradient = 0x7f020057;

Tôi đã kiểm tra nơi tôi đang sử dụng nó và ở đây nó là:

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

Và đây là background_splash_gradiend tập tin xml:

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

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

</shape> 

tôi vẫn không biết tại sao điều này đang gây ra sự cố về Nougat. Tôi đã thử xóa kiểu "StartingWindowTheme" và ứng dụng hiện hoạt động, nó không còn bị treo nữa. Nhưng tôi cần sửa chữa tốt hơn thế.

Chỉnh sửa 2

Vì vậy, tôi đã cố gắng để loại bỏ dòng này:

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

Và nó hoạt động. Có vẻ như android:colorBackground là vấn đề.

TẠM FIX

Kể từ khi vấn đề là trong dòng đề cập ở trên, chỉ có trên Nougat, tôi đã tạo ra một thư mục values-v24 và loại bỏ các dòng đó. Ứng dụng hoạt động trên Nougat bây giờ, nhưng tôi sẽ đánh giá cao một giải pháp tốt hơn.

+0

bạn có sử dụng bất cứ thứ gì từ 'android.R.color' không? – EpicPandaForce

+0

Hm, tôi thực sự không chắc chắn, tôi đã thực hiện tìm kiếm toàn cầu cho "android.R.color" và nó không tìm thấy bất cứ điều gì. Giả sử rằng đây là vấn đề, giải pháp là gì? – Guy

+0

Trên thực tế, có, có vẻ như tôi đang sử dụng nó trong xml. Tôi đang sử dụng "@android: color/transparent" – Guy

Trả lời

2

Tôi đã tìm ra vấn đề ở đâu và cách khắc phục. Đây là giải pháp, tôi sẽ giữ nó đơn giản.

Dòng này đã gây ra vấn đề:

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

Hóa ra bạn không thể đặt drawable như một colorBackground trong XML, vì vậy nó hoạt động sau khi loại bỏ dòng này.

Lý do chỉ bị rơi trên Nougat là vì điều này có thể xảy ra trong các phiên bản trước đó.

Các vấn đề liên quan