web-dev-qa-db-fra.com

Différence entre app: srcCompat et Android: src dans le layout XML d'Android

Chaque fois que je crée un ImageView avec une icône ajoutée à l'aide de Android Les ressources vectorielles de Studio, je reçois une erreur à la ligne app:srcCompat="@drawable/ic_play"

Lorsque je modifie le app:srcCompat avec Android:src, l'erreur disparaît mais l'icône semble pixélisée.

Quelle est la principale différence entre

app:srcCompat="@drawable/ic_play"

et

Android:src="@drawable/ic_play"
116
Zayid Mohammed

app: srcCompat

est la méthode la plus infaillible pour intégrer dessin vectoriel dans votre app.Vector drawables vous permet de remplacer plusieurs ressources png par un seul graphique vectoriel, défini en XML. Alors que précédemment limité à Lollipop et les appareils supérieurs

Remarque

À partir de Bibliothèque de support Android 23.3., Les vecteurs support vectoriels peuvent uniquement être chargés via app:srcCompat.

vous devez ajouter vectorDrawables.useSupportLibrary = true à votre fichier _build.gradle_

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

Android: src

Définit un dessin comme contenu de cette ImageView.Il sera affiché dans sa taille originale. Pas de mise à l'échelle automatique.

113
IntelliJ Amiya

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

Lorsque vous utilisez app:srcCompat="@drawable/some_vector" avec vectorDrawables.useSupportLibrary = true Android utilise des fichiers pouvant être dessinés par vecteur sans générer de fichiers *.png.

Vous pouvez le vérifier avec Android Studio apk analyzer tool. Il suffit de construire apk avec et sans vectorDrawables.useSupportLibrary = true.

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

11
bitvale

tilisez:

app:srcCompat="@drawable/backImage"

L'attribut srcCompat est en réalité 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 simplement une erreur de peluche que vous pouvez ignorer. 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 ça aide.

8
Chandrahasan

Lorsque vous utilisez AppCompat avec ImageView (ou des sous-classes telles que ImageButton et FloatingActionButton), , vous pourrez utiliser le nouveau app:srcCompat attribut de référence au vecteur pouvant être dessiné sur les anciennes versions de la plate-forme (ainsi que tout autre dessin disponible pour Android:src) .

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

srcCompat

Définit un dessin comme contenu de cette image. Permet l'utilisation de vecteurs dessinables lors de l'exécution sur des versions antérieures de la plate-forme.

Peut être une référence à une autre ressource, sous la forme "@[+][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" lorsque vous utilisez app:srcCompat.

4
Mir-Ismaili

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

3
Gabe Sechan
app:srcCompat="some_resource" 

est se référer que c’est AppCompatActivity src qui vient dans la bibliothèque de support en

Android:src="some_resource"

fait référence à une activité simple.

2
Najeeb Idrees

Lorsque vous utilisez AppCompat avec ImageView (ou des sous-classes telles que ImageButton et FloatingActionButton), vous pourrez utiliser le nouvel attribut app:srcCompat pour référencer les vecteurs dessinés. (ainsi que tout autre dessin disponible pour Android:src). Et si vous modifiez les dessins au moment de l'exécution, vous pourrez utiliser la même méthode setImageResource() qu'auparavant (aucune modification ne sera apportée ici).

Utiliser AppCompat et app:srcCompat est la méthode la plus infaillible pour intégrer des vecteurs dessinables à des vecteurs dans votre application. Vous constaterez que le référencement direct des vecteurs dessinés en dehors de app:srcCompat échouera avant Lollipop.

2
Muhammad Younas

Android 5.0 (API de niveau 21) et supérieur fournit un support pour dessiner des vecteurs donc, afin de prendre en charge des vecteurs pouvant être dessiner dans des versions plus anciennes de l'application: srcCompat a été ajouté

0
SaravInfern