更改 Android 中可绘制对象的颜色

问题描述

我制作了一个函数来改变android中drawables的颜色。问题是它只能在 60-70% 的情况下工作。我在应用程序的每个活动的 onCreate 方法调用它。 (颜色保存在共享首选项中) As you can see in this image the color of the background drawable did not change 它工作得很好。但有时在一个奇怪的活动中,只有一些可绘制对象的颜色发生变化,而其他的则保留其认颜色。 这是函数代码

npm install pm2 -g
pm2 start app.js
pm2 startup
pm2 save

这是一个示例调用

 public static void changeTheme(Context context) {
    int color = Color.parseColor(AppUtils.getColorSharedPreference(context,AppConstants.customCOLOR));
    if (color != -1) {
        Drawable unwrappedDrawable = AppCompatResources.getDrawable(context,R.drawable.ic_untitled_4);
        Drawable wrappedDrawable = null;
        if (unwrappedDrawable != null) {
            wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
        }
        Drawable unwrappedDrawableExit = AppCompatResources.getDrawable(context,R.drawable.logout_img);
        Drawable wrappedDrawableExit = null;
        if (unwrappedDrawableExit != null) {
            wrappedDrawableExit = DrawableCompat.wrap(unwrappedDrawableExit);
        }
        Drawable unwrappedDrawableFocus = AppCompatResources.getDrawable(context,R.drawable.focus_img);
        Drawable wrappedDrawableFocus = null;
        if (unwrappedDrawableFocus != null) {
            wrappedDrawableFocus = DrawableCompat.wrap(unwrappedDrawableFocus);
        }
        Drawable unwrappedDrawableSettings = AppCompatResources.getDrawable(context,R.drawable.settings_img);
        Drawable wrappedDrawableSettings = null;
        if (unwrappedDrawableSettings != null) {
            wrappedDrawableSettings = DrawableCompat.wrap(unwrappedDrawableSettings);
        }
        Drawable unwrappedDrawableHome = AppCompatResources.getDrawable(context,R.drawable.home_img);
        Drawable wrappedDrawableHome = null;
        if (unwrappedDrawableHome != null) {
            wrappedDrawableHome = DrawableCompat.wrap(unwrappedDrawableHome);
        }
        Drawable unwrappedDrawableBackArrow = AppCompatResources.getDrawable(context,R.drawable.arrow);
        Drawable wrappedDrawableBackArrow = null;
        if (unwrappedDrawableBackArrow != null) {
            wrappedDrawableBackArrow = DrawableCompat.wrap(unwrappedDrawableBackArrow);
        }
        Drawable unwrappedDrawableunkNownUser = AppCompatResources.getDrawable(context,R.drawable.unkNown_user);
        Drawable wrappedDrawableunkNownUser = null;
        if (unwrappedDrawableunkNownUser != null) {
            wrappedDrawableunkNownUser = DrawableCompat.wrap(unwrappedDrawableunkNownUser);
        }
        Drawable unwrappedDrawabLeverified = AppCompatResources.getDrawable(context,R.drawable.verified_user);
        Drawable wrappedDrawabLeverified = null;
        if (unwrappedDrawabLeverified != null) {
            wrappedDrawabLeverified = DrawableCompat.wrap(unwrappedDrawabLeverified);
        }
        Drawable unwrappedDrawableNoFace = AppCompatResources.getDrawable(context,R.drawable.no_face_detected);
        Drawable wrappedDrawableNoFace = null;
        if (unwrappedDrawableNoFace != null) {
            wrappedDrawableNoFace = DrawableCompat.wrap(unwrappedDrawableNoFace);
        }
        Drawable unwrappedDrawableWarning = AppCompatResources.getDrawable(context,R.drawable.warning);
        Drawable wrappedDrawableWarning = null;
        if (unwrappedDrawableWarning != null) {
            wrappedDrawableWarning = DrawableCompat.wrap(unwrappedDrawableWarning);
        }
        Drawable unwrappedDrawableMessage = AppCompatResources.getDrawable(context,R.drawable.message_new);
        Drawable wrappedDrawableMessage = null;
        if (unwrappedDrawableMessage != null) {
            wrappedDrawableMessage = DrawableCompat.wrap(unwrappedDrawableMessage);
        }
        DrawableCompat.setTintList(wrappedDrawable,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawableBackArrow,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawableExit,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawableHome,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawableSettings,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawableFocus,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawableunkNownUser,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawabLeverified,ColorStateList.valueOf(color));
        DrawableCompat.setTintList(wrappedDrawableNoFace,ColorStateList.valueOf(color));
        if (wrappedDrawableWarning != null) {
            DrawableCompat.setTintList(wrappedDrawableWarning,ColorStateList.valueOf(color));
        }
        if (wrappedDrawableMessage != null) {
            DrawableCompat.setTintList(wrappedDrawableMessage,ColorStateList.valueOf(color));
        }

    }
}

解决方法

你可以试试这个吗?

Drawable unwrappedDrawable = AppCompatResources.getDrawable(context,R.drawable.my_drawable); 
Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
DrawableCompat.setTint(wrappedDrawable,Color.RED);  
,

好的,所以我发现了真正的问题。 这个方法需要在super.onCreate()之前调用;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...