web-dev-qa-db-fra.com

Comment définir VectorDrawable en tant qu'image pour ImageView par programme

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.

42
Hamid.Waezi

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);  
92
Pramod Baggolli

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.

20
Jawnnypoo

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.

17
Priyank Patel

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.

12
sanjeev kumar

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é.

2
JSONParser

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.

0
masoomyf