Je veux définir certains vectorDrawables à un ImageView dans Android Studio.
Je peux définir facilement les fichiers png et jpg, mais lorsque je souhaite définir VectorDrawable, cela ne fonctionne pas sur imageview.
img.setImageResource(R.drawable.ic_home);
ic_home est VectorDrawable et ce code ne fonctionne pas.
Si vous souhaitez utiliser des vecteurs dessinables (moins OR supérieur à API 21), procédez comme suit:
Définissez l'image par programme (par exemple, dans votre activité):
imageView.setImageResource(R.drawable.ic_left_arrow_blue);
ou par XML:
app:srcCompat="@drawable/your_vector_name"
Dans votre application build.gradle
vous devez inclure:
Android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Et pour une prise en charge vectorielle inférieure à API 21, ajoutez ce qui suit à onCreate
:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
Pour ceux qui souhaitent charger un vecteur pouvant être dessiné par programme pour d'autres utilisations, telles que la définition d'un drawableLeft ou autre, vous pouvez utiliser:
Drawable drawable = AppCompatResources.getDrawable(context, drawableRes);
où le contexte est une AppCompatActivity.
Conformément à la version officielle blog des développeurs Android , aucune modification de la méthode setImageResource () à l’exécution pour vectorDrawables.
Si vous modifiez les dessins au moment de l’exécution, vous pourrez utiliser la même méthode setImageResource () comme avant - aucune modification ne sera apportée. Utiliser AppCompat et app: srcCompat est la méthode la plus infaillible pour intégrer des vecteurs dessinables à des vecteurs dans votre application.
Pour plus de détails, consultez cet article de Nice AppCompat - Age des vecteurs par Google Developer.
si vous êtes préoccupé par la compatibilité ascendante, vous devriez utiliser AppCompatImageView
à la place de la vue image. Passez par le code ci-dessous.
<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);
Et cela servira la perspective de app:srcCompat
.
for Java Utilisation du code:
formate_img.setImageResource(R.drawable.ic_text);//ic_text is a Vector Image
et pour l'utilisation de XML:
<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" />
J'avais un vecteur dans Recyclerview que j'utilisais img.setImageResource(R.drawable.ic_home)
qui ne fonctionnait pas correctement, comme si une autre image était formée dans un élément de Recyclerview. Puis j'ai utilisé img.setImageDrawable(activity.getResources().getDrawable(R.drawable.ic_home))
cela a fonctionné.
Utilisez ceci:
Android.support.v7.widget.AppCompatImageButton,
Android.support.v7.widget.AppCompatImageView,
Android.support.v7.widget.AppCompatTextView
au lieu de ImageButton
, ImageView
etc.
Si une image de type vecteur est utilisée. Principalement pour les vues personnalisées.