69 votes

Comment définir VectorDrawable une image pour le ImageView par programmation

Je veux mettre quelques vectorDrawables à une ImageView dans Android Studio.

Je peux le mettre en png et jpg retirable facilement, mais quand je veux mettre VectorDrawable, il ne fonctionne pas sur imageview.

img.setImageResource(R.drawable.ic_home);

ic_home est VectorDrawable et ce code ne fonctionne pas.

145voto

Pramod Baggolli Points 834

Si vous souhaitez utiliser le vecteur d'un drawable (moins OU plus de l'API 21) il suffit de faire les opérations suivantes:

Définir l'image par programmation (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 les vecteurs de support pour les moins de API 21, ajoutez le code suivant à l' onCreate:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);  

26voto

Jawnnypoo Points 46

Pour ceux qui veulent charger un vecteur dessiné par programme pour d'autres utilisations, telles que la fixation d'un drawableLeft ou autre, vous pouvez utiliser:

Drawable drawable = AppCompatResources.getDrawable(context, drawableRes);

lorsque le contexte est un AppCompatActivity.

18voto

Priyank Points 1377

Comme par officiel android blog des développeurs, pas de changement pour setImageResource() la méthode au moment de l'exécution pour vectorDrawables.

Si vous décidez de changer un drawable au moment de l'exécution, vous serez en mesure d'utiliser l' même setImageResource() de la méthode d'avant - pas de modifications. À l'aide de AppCompat et application:srcCompat est le plus infaillible de la méthode de l'intégration de vecteur d'un drawable dans votre app.

Pour plus de détails, consultez cet article de nice AppCompat - l'Âge des vecteurs par Google Developer.

17voto

sanjeev kumar Points 251

si vous êtes concernés par la compatibilité descendante, alors vous devriez utiliser AppCompatImageView au lieu de pf d'affichage de l'image. passer 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 il constituera le point de vue de l' app:srcCompat.

3voto

pour Java Code à utiliser:

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" />

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X