3

My app runs smoothly in 5.1.0, but when I run in 4.2.2 it shows an error:

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector 

I have researched about this. It says error in adding vector support in gradle, so I added:

compileSdkVersion 23
buildToolsVersion "25.0.1"
 defaultConfig {
    applicationId "com.wmt.android.troopool"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "0.1"
    multiDexEnabled true
    renderscriptTargetApi 18
    renderscriptSupportModeEnabled true
    vectorDrawables.useSupportLibrary = true
}

compile 'com.android.support:support-vector-drawable:23.2.0'
compile 'com.android.support:animated-vector-drawable:23.2.0'

vectorDrawables.useSupportLibrary = true and two dependencies in gradle file.

But it shows the same error in 4.4.2.

1 Answers1

0

Hey to use vector drawables on android below lollipop you need to place the images from your code here are a few functions that should help you do whatever you want

public static enum DrawablePosition {
    Left, Right, Top, Bottom
}

public static Drawable getDrawable(Context context, int drawable) {
    return DrawableCompat.wrap(VectorDrawableCompat.create(context.getResources(), drawable, null));
}

public static Drawable getDrawableWithColor(Context context, int drawableResId, int IntColorOfDrawable) {
    Drawable drawable = VectorDrawableCompat.create(context.getResources(), drawableResId, null);
    DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, IntColorOfDrawable);
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
    return drawable;
}

public static void setDrawableWithColorForIds(AppCompatActivity activity, int color, int[] ids, int drawable[]) {
    for (int i = 0; i != ids.length; i++) {
        Drawable drawable1 = VectorDrawableCompat.create(activity.getResources(), drawable[i], null);
        DrawableCompat.wrap(drawable1);
        DrawableCompat.setTint(drawable1, color);
        DrawableCompat.setTintMode(drawable1, PorterDuff.Mode.SRC_IN);
        ((TextView) activity.findViewById(ids[i])).setCompoundDrawablesWithIntrinsicBounds(drawable1, null, null, null);
    }
}

public static void placeVectorOnTextView(Context context, TextView textView, int vectorDrawableResID, @Nullable Integer VectorColor, DrawablePosition position) {
    Drawable drawable = VectorDrawableCompat.create(context.getResources(), vectorDrawableResID, null);
    DrawableCompat.wrap(drawable);
    if (VectorColor != null){
        DrawableCompat.setTint(drawable, VectorColor);
        DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
    }
    switch (position) {
        case Left:
            textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
            break;
        case Bottom:
            textView.setCompoundDrawablesWithIntrinsicBounds(null, null, null, drawable);
            break;
        case Right:
            textView.setCompoundDrawablesWithIntrinsicBounds(null, null, drawable, null);
            break;
        case Top:
            textView.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
            break;

    }

}

public static void placeVectorOnEditText(Context context, EditText editText, int vectorDrawableResID, int VectorColor, DrawablePosition position) {
    Drawable drawable = VectorDrawableCompat.create(context.getResources(), vectorDrawableResID, null);
    DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, VectorColor);
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
    switch (position) {
        case Left:
            editText.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
            break;
        case Bottom:
            editText.setCompoundDrawablesWithIntrinsicBounds(null, null, null, drawable);
            break;
        case Right:
            editText.setCompoundDrawablesWithIntrinsicBounds(null, null, drawable, null);
            break;
        case Top:
            editText.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
            break;

    }

}

public static void placeVectorOnButton(Context context, Button button, int vectorDrawableResID, int VectorColor, DrawablePosition position) {
    Drawable drawable = VectorDrawableCompat.create(context.getResources(), vectorDrawableResID, null);
    DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, VectorColor);
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
    switch (position) {
        case Left:
            button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
            break;
        case Bottom:
            button.setCompoundDrawablesWithIntrinsicBounds(null, null, null, drawable);
            break;
        case Right:
            button.setCompoundDrawablesWithIntrinsicBounds(null, null, drawable, null);
            break;
        case Top:
            button.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
            break;

    }

}

public static void placeVectorOnRadioButton(Context context, RadioButton radioButton, int vectorDrawableResID, int VectorColor, DrawablePosition position) {
    Drawable drawable = VectorDrawableCompat.create(context.getResources(), vectorDrawableResID, null);
    DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, VectorColor);
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
    switch (position) {
        case Left:
            radioButton.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
            break;
        case Bottom:
            radioButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, drawable);
            break;
        case Right:
            radioButton.setCompoundDrawablesWithIntrinsicBounds(null, null, drawable, null);
            break;
        case Top:
            radioButton.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
            break;

    }

}

public static void placeVectorOnCheckBox(Context context, CheckBox checkBox, int vectorDrawableResID, int VectorColor, DrawablePosition position) {
    Drawable drawable = VectorDrawableCompat.create(context.getResources(), vectorDrawableResID, null);
    DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, VectorColor);
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
    switch (position) {
        case Left:
            checkBox.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
            break;
        case Bottom:
            checkBox.setCompoundDrawablesWithIntrinsicBounds(null, null, null, drawable);
            break;
        case Right:
            checkBox.setCompoundDrawablesWithIntrinsicBounds(null, null, drawable, null);
            break;
        case Top:
            checkBox.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
            break;

    }

}
Gil Goldzweig
  • 1,809
  • 1
  • 13
  • 26