问题
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.
回答1:
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);
回答2:
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.
回答3:
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.
回答4:
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.
回答5:
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" />
回答6:
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 .
回答7:
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.
回答8:
Delete two folders form your drawable folder then rebuild your project it will work properly
来源:https://stackoverflow.com/questions/41098015/how-to-set-vectordrawable-as-an-image-for-imageview-programmatically