189 votes

Différence entre app:srcCompat et Android:src dans le XML de mise en page d'Android

Lorsque je crée un ImageView avec une icône ajoutée à l'aide de Vector Assets d'Android Studio, j'obtiens une erreur à la ligne suivante app:srcCompat="@drawable/ic_play"

Lorsque je change le app:srcCompat avec android:src L'erreur a disparu mais l'icône est pixellisée.

Quelle est la principale différence entre

app:srcCompat="@drawable/ic_play"

y

android:src="@drawable/ic_play"

174voto

IntelliJ Amiya Points 672

app:srcCompat

est la méthode la plus sûre pour intégrer Dessins vectoriels Les éléments vectoriels vous permettent de remplacer plusieurs éléments png par un seul graphique vectoriel, défini en XML. Bien qu'auparavant limitée aux appareils Lollipop et supérieurs

Note

A partir de Bibliothèque de support Android 23.3.0 , Supports vectoriels dessinables ne peut être chargé que par l'intermédiaire de app:srcCompat .

vous devez ajouter vectorDrawables.useSupportLibrary = true à votre build.gradle fichier

    // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  

Android:src

Définit un objet à dessiner comme contenu de cette ImageView. sa taille originale. Pas de mise à l'échelle automatique.

4 votes

L'erreur avec app:srcCompact a disparu quand on a ajouté vectorDrawables.useSupportLibrary = true dans le module d'application Gradle

4 votes

App:srcCompat va-t-il entrer en conflit avec les anciennes versions d'Android ? Plus précisément, Api 19 est la version la plus ancienne à laquelle je fais référence.

0 votes

On peut enfin se débarrasser des icônes bitmap.

40voto

jQuick Points 31

Si vous utilisez android:src="@drawable/some_vector" sans vectorDrawables.useSupportLibrary = true dans le fichier build.gradle et que votre application comporte des images vectorielles (vector drawable), alors, lors de la construction du fichier apk Le plugin Android gradle génère un grand nombre de fichiers *.png pour différents écrans (hdpi, xhdpi...) à partir de chacun de vos dessinables vectoriels (uniquement pour API =< 19). Le résultat - une taille plus grande de apk .

Lorsque vous utilisez app:srcCompat="@drawable/some_vector" avec vectorDrawables.useSupportLibrary = true Android utilise des fichiers vectoriels dessinables sans générer *.png des fichiers.

Vous pouvez le vérifier avec l'outil Android Studio apk analyzer. Construisez simplement l'apk avec et sans vectorDrawables.useSupportLibrary = true .

Je pense que c'est la principale différence.

7 votes

Ainsi, si vous avez activé useSupportLibrary, pourquoi avez-vous besoin de la syntaxe spéciale, plutôt que de Android:src= ? Si vous utilisez Android:src= avec useSupportLibrary activé, évitez vous la prolifération des PNGs ?

12voto

Chandrahasan Points 728

Utilisez :

app:srcCompat="@drawable/backImage"

L'attribut srcCompat est en fait défini dans la bibliothèque AppCompat. Important : vous devrez ajouter l'espace de nom approprié pour cela.

xmlns:app="http://schemas.android.com/apk/res-auto"

Note

Ce que vous obtenez semble être une simple erreur de lint qui peut être ignorée. J'ai essayé et obtenu la même erreur, mais cela fonctionne correctement.

Vous pouvez utiliser tools:ignore="MissingPrefix" pour éviter de voir cette erreur, temporairement.

J'espère que cela vous aidera.

9voto

Mir-Ismaili Points 1588

Lorsque vous utilisez AppCompat avec ImageView (ou des sous-classes telles que ImageButton y FloatingActionButton ), vous serez en mesure d'utiliser le nouveau app:srcCompat pour référencer les objets vectoriels dessinés sur les anciennes versions de la plate-forme (ainsi que tout autre objet dessinable disponible pour l'utilisateur). android:src ) .

Android.support.v7.appcompat.R.attr.srcCompat :

srcCompat

Définit un objet à dessiner comme contenu de cette ImageView. Permet l'utilisation d'un dessinable vectoriel lors de l'exécution sur des versions plus anciennes de la plate-forme.

Peut être une référence à une autre ressource, sous forme de "@[+][package:]type/name" ou un attribut de thème sous la forme "?[package:]type/name" .


N'oubliez pas d'ajouter xmlns:app="http://schemas.android.com/apk/res-auto" lors de l'utilisation app:srcCompat .

4voto

Gabe Sechan Points 23732

Les vecteurs et les vecteurs animés ne sont pris en charge que dans les versions récentes du framework. srcCompat peut être utilisé avec la bibliothèque de compatibilité pour les faire fonctionner, mais cela ne fonctionne qu'avec certaines vues de la bibliothèque de support. Remarquez que app : est utilisé à la place de Android :. Cela signifie qu'il ne fait pas partie du framework, mais qu'il s'agit d'un paramètre défini par votre application.

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