web-dev-qa-db-ja.com

クラス「Android.graphics.drawable.RippleDrawable」が見つかりませんでした

私はサードパーティのライブラリを使用していますが、DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);を使用するメソッドがあります。 Android 5.0+でアプリをテストしたとき、問題はなく、うまく機能しました。しかし、Android 4.4.4 :

    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) 

上記のスタックトレースを除いて、コンソールに次のようなエラー情報が表示されました。

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

そしてこれは:

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

もちろん、プロジェクトでv4サポートライブラリをコンパイルしました:)

誰がこの問題に遭遇しましたか?手伝ってくれてありがとう!

---------------------------------------------- --------------------------------------------
更新1:これが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

これを読む :

DrawableCompatのソースコードを見ると、どのバージョン<support library 21メソッドは何もしません

DrawableCompatのアイデアは、実際にその機能を提供するのではなく、単に古いバージョンでクラッシュしないように思われます。

UseFulのヒント:

support library 22.1 DrawableCompatを使用して、ドロウアブルに色を付けることができます。

DrawableCompat.wrap(Drawable)およびsetTint()、setTintList()、およびsetTintMode()は機能します。複数の色をサポートするためだけに個別のドロウアブルを作成および維持する必要はありません!

5
user5248371

私はプロジェクトでボタンの背景とそのエラーを作成するために?colorPrimaryを使用し、?colorPrimaryを@ color/colorPrimaryに変更し、その仕事を私のために:)

0
hamidjahandideh