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
-
ContextCompatworks well -
ResourcesCompatworks well -
AppCompatResourcesworks well -
VectorDrawableCompatworks well -
API < 21
-
ContextCompatcrash -
ResourcesCompatcrash -
AppCompatResourcesworks well -
VectorDrawableCompatworks well
2) For normal image
- In all API levels
ContextCompatworks wellResourcesCompatworks wellAppCompatResourcesworks wellVectorDrawableCompatcrash
II) Using
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); in onCreated of the Application class
1) For vector images
- In all API levels
ContextCompatworks wellResourcesCompatworks wellAppCompatResourcesworks wellVectorDrawableCompatworks well
2) For normal images
- In all API levels
ContextCompatworks wellResourcesCompatworks wellAppCompatResourcesworks wellVectorDrawableCompatcrash