web-dev-qa-db-fra.com

Impossible de trouver la classe 'Android.graphics.drawable.RippleDrawable'

J'utilise une bibliothèque tierce, il existe une méthode utilisant DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);. Lorsque je teste mon application dans Android 5.0 +, il n'y a pas eu de problème et a bien fonctionné. Mais en ce qui concerne Android 4.4.4, cela a généré une exception) :

    05-09 13:15:15.030 26447-26447/com.wizchen.athit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.wizchen.athit, PID: 26447
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wizchen.athit/com.wizchen.athit.view.activity.MainActivity}: Java.lang.NullPointerException
   at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2271)
   at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2320)
   at Android.app.ActivityThread.access$800(ActivityThread.Java:138)
   at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1269)
   at Android.os.Handler.dispatchMessage(Handler.Java:102)
   at Android.os.Looper.loop(Looper.Java:136)
   at Android.app.ActivityThread.main(ActivityThread.Java:5117)
   at Java.lang.reflect.Method.invokeNative(Native Method)
   at Java.lang.reflect.Method.invoke(Method.Java:515)
   at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:785)
   at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:601)
   at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.NullPointerException
   at Android.support.v4.graphics.drawable.DrawableWrapperDonut.setCompatTintMode(DrawableWrapperDonut.Java:278)
   at Android.support.v4.graphics.drawable.DrawableCompatBase.setTintMode(DrawableCompatBase.Java:48)
   at Android.support.v4.graphics.drawable.DrawableCompat$BaseDrawableImpl.setTintMode(DrawableCompat.Java:99)
   at Android.support.v4.graphics.drawable.DrawableCompat.setTintMode(DrawableCompat.Java:400)
   at com.wizchen.athit.lib.AppThemeEngine.util.TintHelper.createTintedDrawable(TintHelper.Java:359)
   at com.wizchen.athit.lib.AppThemeEngine.viewprocessors.ToolbarProcessor.process(ToolbarProcessor.Java:117)
   at com.wizchen.athit.lib.AppThemeEngine.viewprocessors.ToolbarProcessor.process(ToolbarProcessor.Java:44)
   at com.wizchen.athit.lib.AppThemeEngine.ATE.postApply(ATE.Java:209)
   at com.wizchen.athit.lib.AppThemeEngine.ATEActivity.onStart(ATEActivity.Java:60)
   at com.wizchen.athit.view.activity.MainActivity.onStart(MainActivity.Java:68)
   at Android.app.Instrumentation.callActivityOnStart(Instrumentation.Java:1183)
   at Android.app.Activity.performStart(Activity.Java:5359)
   at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2244)
   at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2320) 
   at Android.app.ActivityThread.access$800(ActivityThread.Java:138) 
   at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1269) 
   at Android.os.Handler.dispatchMessage(Handler.Java:102) 
   at Android.os.Looper.loop(Looper.Java:136) 
   at Android.app.ActivityThread.main(ActivityThread.Java:5117) 
   at Java.lang.reflect.Method.invokeNative(Native Method) 
   at Java.lang.reflect.Method.invoke(Method.Java:515) 
   at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:785) 
   at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:601) 
   at dalvik.system.NativeStart.main(Native Method) 

À l'exception de la trace de pile ci-dessus, j'ai vu des informations d'erreur imprimées dans ma console comme ceci:

05-09 13:15:15.030 26447-26447/com.wizchen.athit E/dalvikvm: Could not find class 'Android.graphics.drawable.RippleDrawable', referenced from method com.wizchen.athit.lib.AppThemeEngine.util.TintHelper.setTintAuto

Et celui-là:

05-09 13:15:15.030 26447-26447/com.wizchen.athit E/dalvikvm: Could not find class 'Android.graphics.drawable.RippleDrawable', referenced from method com.wizchen.athit.lib.AppThemeEngine.util.TintHelper.setTintSelector

Bien sûr, j'ai compilé la bibliothèque de support v4 dans mon projet :)

Qui a rencontré ce problème? Merci pour l'aide!

---------------------------------------------- --------------------------------------------
mise à jour 1: c'est ce qui cause NullPointerException:

    @CheckResult
    @Nullable
    public static Drawable createTintedDrawable(@Nullable Drawable drawable, @ColorInt int color) {
        if (drawable == null) return null;
        drawable = DrawableCompat.wrap(drawable.mutate());
        DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
        DrawableCompat.setTint(drawable, color);
        return drawable;
    }
8
wizChen

Lis ça :

Si vous regardez le code source de DrawableCompat, vous verrez que pour toute version <support library 21la méthode ne fait rien .

L'idée de DrawableCompat semble simplement ne pas planter sur les anciennes versions, plutôt que de fournir réellement cette fonctionnalité.

Conseils utiles :

Avec support library 22.1 vous pouvez utiliser DrawableCompat pour teinter les tirages.

DrawableCompat.wrap (Drawable) et setTint (), setTintList () et setTintMode () fonctionneront juste: pas besoin de créer et de maintenir des drawables séparés uniquement pour prendre en charge plusieurs couleurs!

5
user5248371

j'ai utilisé? colorPrimary pour créer l'arrière-plan du bouton et son erreur de saké dans mon projet, et je change? colorPrimary en @ color/colorPrimary et son travail pour moi :)

0
hamidjahandideh