ResourcesCompat.getDrawable() vs AppCompatResources.getDrawable()

Here is my understanding after some testing:

ContextCompat.getDrawable(@NonNull Context context, @DrawableRes int resId)

ResourcesCompat.getDrawable(@NonNull Resources res, @DrawableRes int id, @Nullable Theme theme)

AppCompatResources.getDrawable(@NonNull Context context, @DrawableRes int resId)

VectorDrawableCompat.create(@NonNull Resources res, @DrawableRes int resId, @Nullable Theme theme

The first thing I see is VectorDrawableCompat and ResourcesCompat can specify a theme.

I) Without using

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); in onCreated of the Application class

1) For vector images

  • API >= 21

  • ContextCompat works well

  • ResourcesCompat works well

  • AppCompatResources works well

  • VectorDrawableCompat works well

  • API < 21

  • ContextCompat crash

  • ResourcesCompat crash

  • AppCompatResources works well

  • VectorDrawableCompat works well

2) For normal image

  • In all API levels
  • ContextCompat works well
  • ResourcesCompat works well
  • AppCompatResources works well
  • VectorDrawableCompat crash

II) Using

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); in onCreated of the Application class

1) For vector images

  • In all API levels
  • ContextCompat works well
  • ResourcesCompat works well
  • AppCompatResources works well
  • VectorDrawableCompat works well

2) For normal images

  • In all API levels
  • ContextCompat works well
  • ResourcesCompat works well
  • AppCompatResources works well
  • VectorDrawableCompat crash

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)