How to set VectorDrawable as an image for ImageView programmatically
AndroidImageviewAndroid VectordrawableAndroid Problem Overview
I want to set some vectorDrawables to a ImageView in Android Studio.
I can set png and jpg drawable easily but when i want to set VectorDrawable, it does not work on imageview.
img.setImageResource(R.drawable.ic_home);
ic_home is VectorDrawable and this code doesn't work.
Android Solutions
Solution 1 - Android
If you want to use vector drawables (less OR greater than API 21) just do the following:
Set the image programmatically (e.g. in your activity):
imageView.setImageResource(R.drawable.ic_left_arrow_blue);
or by XML:
app:srcCompat="@drawable/your_vector_name"
In your app's build.gradle
you need to include:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
And for vector support for less then API 21, add the following to onCreate
:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
Solution 2 - Android
For those who want to load a vector drawable programmatically for other uses, such as setting a drawableLeft or otherwise, you can use:
Drawable drawable = AppCompatResources.getDrawable(context, drawableRes);
where the context is a AppCompatActivity.
Solution 3 - Android
As per official android developer blog, no changes for setImageResource() method at runtime for vectorDrawables.
> If you’re changing drawables at runtime, you’ll be able to use the > same > setImageResource() > method as before - no changes there. Using AppCompat and app:srcCompat > is the most foolproof method of integrating vector drawables into your > app.
For more details, check out this nice article AppCompat — Age of the vectors by Google Developer.
Solution 4 - Android
if you are concerned with the backward compatibility then you should use AppCompatImageView
instead of image view. go through the code below.
<android.support.v7.widget.AppCompatImageView
android:id="@+id/iv_about"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
app:srcCompat="@drawable/ic_vector_image"
/>
java
AppCompatImageView image = (AppCompatImageView) findViewById(R.id.iv_about);
image.setImageResource(R.drawable.ic_vector_image);
below code need to add in build.gradle
android { defaultConfig{ vectorDrawables.useSupportLibrary = true } }
And it will serve the perspective of app:srcCompat.
Solution 5 - Android
for Java Code use:
formate_img.setImageResource(R.drawable.ic_text);//ic_text is a Vector Image
and for XML use:
<android.support.v7.widget.AppCompatImageView
android:id="@+id/search_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_weight="1"
ads:srcCompat="@drawable/ic_barcode" //for Vector Image
tools:ignore="VectorDrawableCompat" />
Solution 6 - Android
I had a vector in recycler view I was using img.setImageResource(R.drawable.ic_home)
which didn't worked properly like some other image get formed in some item of recycler view. Then I used img.setImageDrawable(activity.getResources().getDrawable(R.drawable.ic_home))
this worked .
Solution 7 - Android
Use this:
android.support.v7.widget.AppCompatImageButton,
android.support.v7.widget.AppCompatImageView,
android.support.v7.widget.AppCompatTextView
instead of ImageButton
, ImageView
etc.
If vector type image is used. Mainly for custom views.