在android中更改可绘图项的颜色

bfnvny8b  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(418)

我已经做了一个函数来改变android中可绘制图形的颜色。问题是它只在60-70%的时间内有效。我在应用程序的每个活动的oncreate方法中调用它(颜色保存在共享首选项中)正如您在这张图像中看到的,背景可绘制的颜色没有改变,它工作得很好。但有时,在一个奇怪的活动中,只有一些可绘制图形的颜色发生变化,而其他图形则保留其默认颜色。这是函数的代码:

  1. public static void changeTheme(Context context) {
  2. int color = Color.parseColor(AppUtils.getColorSharedPreference(context, AppConstants.customCOLOR));
  3. if (color != -1) {
  4. Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.ic_untitled_4);
  5. Drawable wrappedDrawable = null;
  6. if (unwrappedDrawable != null) {
  7. wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
  8. }
  9. Drawable unwrappedDrawableExit = AppCompatResources.getDrawable(context, R.drawable.logout_img);
  10. Drawable wrappedDrawableExit = null;
  11. if (unwrappedDrawableExit != null) {
  12. wrappedDrawableExit = DrawableCompat.wrap(unwrappedDrawableExit);
  13. }
  14. Drawable unwrappedDrawableFocus = AppCompatResources.getDrawable(context, R.drawable.focus_img);
  15. Drawable wrappedDrawableFocus = null;
  16. if (unwrappedDrawableFocus != null) {
  17. wrappedDrawableFocus = DrawableCompat.wrap(unwrappedDrawableFocus);
  18. }
  19. Drawable unwrappedDrawableSettings = AppCompatResources.getDrawable(context, R.drawable.settings_img);
  20. Drawable wrappedDrawableSettings = null;
  21. if (unwrappedDrawableSettings != null) {
  22. wrappedDrawableSettings = DrawableCompat.wrap(unwrappedDrawableSettings);
  23. }
  24. Drawable unwrappedDrawableHome = AppCompatResources.getDrawable(context, R.drawable.home_img);
  25. Drawable wrappedDrawableHome = null;
  26. if (unwrappedDrawableHome != null) {
  27. wrappedDrawableHome = DrawableCompat.wrap(unwrappedDrawableHome);
  28. }
  29. Drawable unwrappedDrawableBackArrow = AppCompatResources.getDrawable(context, R.drawable.arrow);
  30. Drawable wrappedDrawableBackArrow = null;
  31. if (unwrappedDrawableBackArrow != null) {
  32. wrappedDrawableBackArrow = DrawableCompat.wrap(unwrappedDrawableBackArrow);
  33. }
  34. Drawable unwrappedDrawableUnknownUser = AppCompatResources.getDrawable(context, R.drawable.unknown_user);
  35. Drawable wrappedDrawableUnknownUser = null;
  36. if (unwrappedDrawableUnknownUser != null) {
  37. wrappedDrawableUnknownUser = DrawableCompat.wrap(unwrappedDrawableUnknownUser);
  38. }
  39. Drawable unwrappedDrawableVerified = AppCompatResources.getDrawable(context, R.drawable.verified_user);
  40. Drawable wrappedDrawableVerified = null;
  41. if (unwrappedDrawableVerified != null) {
  42. wrappedDrawableVerified = DrawableCompat.wrap(unwrappedDrawableVerified);
  43. }
  44. Drawable unwrappedDrawableNoFace = AppCompatResources.getDrawable(context, R.drawable.no_face_detected);
  45. Drawable wrappedDrawableNoFace = null;
  46. if (unwrappedDrawableNoFace != null) {
  47. wrappedDrawableNoFace = DrawableCompat.wrap(unwrappedDrawableNoFace);
  48. }
  49. Drawable unwrappedDrawableWarning = AppCompatResources.getDrawable(context, R.drawable.warning);
  50. Drawable wrappedDrawableWarning = null;
  51. if (unwrappedDrawableWarning != null) {
  52. wrappedDrawableWarning = DrawableCompat.wrap(unwrappedDrawableWarning);
  53. }
  54. Drawable unwrappedDrawableMessage = AppCompatResources.getDrawable(context, R.drawable.message_new);
  55. Drawable wrappedDrawableMessage = null;
  56. if (unwrappedDrawableMessage != null) {
  57. wrappedDrawableMessage = DrawableCompat.wrap(unwrappedDrawableMessage);
  58. }
  59. DrawableCompat.setTintList(wrappedDrawable, ColorStateList.valueOf(color));
  60. DrawableCompat.setTintList(wrappedDrawableBackArrow, ColorStateList.valueOf(color));
  61. DrawableCompat.setTintList(wrappedDrawableExit, ColorStateList.valueOf(color));
  62. DrawableCompat.setTintList(wrappedDrawableHome, ColorStateList.valueOf(color));
  63. DrawableCompat.setTintList(wrappedDrawableSettings, ColorStateList.valueOf(color));
  64. DrawableCompat.setTintList(wrappedDrawableFocus, ColorStateList.valueOf(color));
  65. DrawableCompat.setTintList(wrappedDrawableUnknownUser, ColorStateList.valueOf(color));
  66. DrawableCompat.setTintList(wrappedDrawableVerified, ColorStateList.valueOf(color));
  67. DrawableCompat.setTintList(wrappedDrawableNoFace, ColorStateList.valueOf(color));
  68. if (wrappedDrawableWarning != null) {
  69. DrawableCompat.setTintList(wrappedDrawableWarning, ColorStateList.valueOf(color));
  70. }
  71. if (wrappedDrawableMessage != null) {
  72. DrawableCompat.setTintList(wrappedDrawableMessage, ColorStateList.valueOf(color));
  73. }
  74. }
  75. }

这是一个示例调用:

  1. if(Color.parseColor(AppUtils.getColorSharedPreference(LoginActivity.this,AppConstants.customCOLOR))!=-1)
  2. {
  3. AppUtils.changeTheme(LoginActivity.this);
  4. }
stszievb

stszievb1#

你可以试试这个吗?

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

vnjpjtjt2#

好吧,我发现了真正的问题。这是初学者的错误。我忘了在我选择颜色的地方调用我的函数。

相关问题