Matteo Matteo - 3 months ago 30
Android Question

Android VectorDrawable as Compound Drawables

As of stated by this android developer blog post, we can now use

VectorDrawables
on Android API 7+ using the
AppCompat 23.2.0
and later versions.

Everything seems to work fine for me, except when it comes to use drawables as a compound to a TextView.

Normally, one would do something like:

customTab.setCompoundDrawablesWithIntrinsicBounds(
0,
R.drawable.my_vector,
0,
0
);


Unfortunately this is not working at the moment, and I wasn't able to find a workaround for this problem.

As of stated by the post, the only available and working methods are the xml one, using
app:srcCompat="@drawable/..."
and the Java
setImageResource(...)


How can I use the new vector drawable support with the
setCompoundDrawable()
method?

Thanks in advance.

Edit:

as requested, here's the result of the
VectorDrawableCompat
class:

explore tab

the xml is:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="98"
android:viewportHeight="102">

<path
android:fillColor="#4D4D4D"
android:strokeWidth="2"
android:strokeColor="#4D4D4D"
android:pathData="M63.3336386,72.2631001 C56.7778507,76.9021242
48.7563953,79.6307404
40.09319,79.6307404 C17.9503315,79.6307404 0,61.804793 0,39.8153702
C0,17.8259473 17.9503315,0 40.09319,0 C62.2360484,0 80.1863799,17.8259473
80.1863799,39.8153702 C80.1863799,50.8100816 75.6987973,60.7639242
68.4433567,67.9690887 L96.7320074,96.0617174 C98.0293966,97.3501165
97.9978616,99.4159703 96.6953405,100.709466 C95.3837385,102.011979
93.2974318,102.019264 92.0151615,100.745879 L63.3336386,72.2631001
L63.3336386,72.2631001 L63.3336386,72.2631001 Z M40.09319,74.9465792
C59.6310061,74.9465792 75.4695341,59.217802 75.4695341,39.8153702
C75.4695341,20.4129383 59.6310061,4.6841612 40.09319,4.6841612
C20.5553738,4.6841612 4.71684588,20.4129383 4.71684588,39.8153702
C4.71684588,59.217802 20.5553738,74.9465792 40.09319,74.9465792
L40.09319,74.9465792 L40.09319,74.9465792 Z" />
</vector>

Answer

Following the precious suggestions given by @pskink I was able to load correctly a drawable inside my view.

My problem was the selector I was using as my xml to give the "current active tab" feedback in my TabLayout.

I've solved my problem by doing a cast:

Drawable drawable;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            drawable = ContextCompat.getDrawable(mContext, tabIcons[i]);
        } else {
            drawable = getResources().getDrawable(tabIcons[i]);
        }

        StateListDrawable stateListDrawable =  (StateListDrawable) drawable;
        customTab.setCompoundDrawablesWithIntrinsicBounds(
                null,
                stateListDrawable,
                null,
                null
        );