web-dev-qa-db-fra.com

Impossible d’utiliser srcCompat pour ImageViews dans android

J'utilise la bibliothèque de support de conception 23.2. J'ai ajouté ces lignes dans mon build.gradle car mon plugin Gradle est la version 1.5

defaultConfig {
        applicationId "com.abc.xyz"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        generatedDensities = []
    } 

      aaptOptions {  
        additionalParameters "--no-version-vectors"  
      }  
     }

comme il est spécifié dans ici

Mais je ne peux pas utiliser l'attribut srcCompat pour mon imageview.

<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:srcCompat="@drawable/wallpaper"/>

où @ drawable/wallpaper est un fichier de ressources vectoriel

<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:width="24dp"
    Android:height="24dp"
    Android:viewportWidth="24.0"
    Android:viewportHeight="24.0">
<path
    Android:fillColor="#FF000000"
    Android:pathData="M4,4h7V2H4c-1.1,0 -2,0.9 -2,2v7h2V4zm6,9l-4,5h12l-3,-4 -2.03,2.71L10,13zm7,-4.5c0,-0.83 -0.67,-1.5 -1.5,-1.5S14,7.67 14,8.5s0.67,1.5 1.5,1.5S17,9.33 17,8.5zM20,2h-7v2h7v7h2V4c0,-1.1 -0.9,-2 -2,-2zm0,18h-7v2h7c1.1,0 2,-0.9 2,-2v-7h-2v7zM4,13H2v7c0,1.1 0.9,2 2,2h7v-2H4v-7z"/>

Ça dit

Erreur: (14) Aucun identifiant de ressource trouvé pour l'attribut 'srcCompat' dans le package 'Android'

Ma version de Gradle est 1.5. Comment puis-je utiliser srcCompat?

43
Neeraj

ne pas

Android:srcCompat="@drawable/wallpaper"

Do

app:srcCompat="@drawable/wallpaper"

comme il srcCompat attribut est en fait défini dans la bibliothèque AppCompat.

Important vous devrez ajouter un espace de noms approprié pour cela.

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

Important

ce que vous obtenez, il semble que ce soit juste une erreur de peluches qui peut être ignorée. J'ai essayé et ai la même erreur, mais cela fonctionne correctement.

vous pouvez utiliser tools:ignore="MissingPrefix" pour ne pas voir cette erreur temporairement.

112
Bhavesh Patadiya

Combinant plusieurs réponses en une seule réponse:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    Android:background="@color/primary">


    <Android.support.v7.widget.AppCompatImageView
        Android:layout_width="300dp"
        Android:layout_height="100dp"
        Android:id="@+id/logoImageView"
        Android:layout_centerHorizontal="true"
        Android:layout_centerVertical="true"
        app:srcCompat="@drawable/my_logo_vector"
        Android:tint="@color/white"
        />

</RelativeLayout>

Cela a fonctionné pour moi. Aucune erreur de peluche. Utilisez AppCompatImageView.

30
Micro

Premier (dans build.gradle)

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

Seconde

<ImageView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_traffic_black_24dp"
    tools:ignore="MissingPrefix" />

Troisième

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

Et c'est parti.

11
Gark

Appel app:srcCompat au lieu de Android:srcCompat.

Ne pas

Android:srcCompat="@drawable/your_image"

[~ # ~] faire [~ # ~]

app:srcCompat="@drawable/your_image"

Enfin

    <ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:srcCompat="@drawable/wallpaper"/>

Ma version est 1.5

Mettez à niveau votre version Gradle .

Solution

Gradle Plugin 2.0+  
com.Android.tools.build:gradle:2.0.0-beta2

Les dessins vectoriels vous permettent de remplacer plusieurs ressources png par un seul vecteur graphique, défini en XML. Alors qu'ils étaient auparavant limités aux périphériques Lollipop et supérieurs, VectorDrawable et AnimatedVectorDrawable sont désormais disponibles via deux nouvelles bibliothèques de support support-vector-dessinable et support-animated-vector-dessinable.

Ajoute ça

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

Vous noterez que ce nouvel attribut n’existe que dans la version 2.0 du plug-in Gradle. Si vous utilisez Gradle 1.5, vous utiliserez plutôt

// Gradle Plugin 1.5  
 Android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  

Passer à travers Drawables de vecteur de support

3
IntelliJ Amiya

il y a plusieurs choses dont vous devez vous soucier Tout d'abord, utilisez:

defaultConfig {
            vectorDrawables.useSupportLibrary = true
        }

ou

vectorDrawables {
        useSupportLibrary = true
    }

et deuxième utilisation

 <Android.support.v7.widget.AppCompatImageView
                Android:id="@+id/changeLanguages"
                Android:layout_width="50dp"
                Android:layout_height="50dp"
                Android:layout_alignParentTop="true"
                Android:layout_centerHorizontal="true"
                Android:adjustViewBounds="true"
                Android:background="@color/transparent"
                Android:scaleType="fitCenter"
                app:srcCompat="@drawable/ic_transfer" />

Toujours utiliser AppCompatImageView ou Button car l'image vectorielle n'est pas prise en charge par Simple ImageView

si toutes les méthodes ci-dessus ne fonctionnent pas, utilisez

public class App extends Application {

  @Override public void onCreate() {
    super.onCreate();

    // Make sure we use vector drawables
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
  }
}

Si vous utilisez Activity, développez votre activité avec AppCompatActivty

public final class MainActivity extends AppCompatActivity {    
  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
  }
}
3

Je viens de changer:

app:srcCompat="@drawable/wallpaper"

à

Android:src="@drawable/wallpaper"

Cela a fonctionné pour moi.

3
vanquan223

Vous utilisez Android:srcCompat. Il devrait au lieu de cela par app:srcCompat comme il s’agit d’un attribut défini dans AppCompat et non dans le Android: espace de noms.

1
ianhanniballake

Assurez-vous que l'image que vous essayez d'utiliser est au format PNG.

Copiez la photo.

Accédez à mipmap sur l'onglet 1.Projet de la hiérarchie Android.

Cliquez une fois sur mipmap puis (Sous Windows ctrl + v), lorsque vous nommez la photo, assurez-vous que ses lettres sont en minuscule et qu'aucun symbole ne s'y trouve.

La photo devrait être utilisable.

Définissez la vue de votre image (vous devrez peut-être utiliser une couleur de remplissage temporairement).

Cliquez sur l'imageView, puis cliquez sur srcCompact (celui sans pinceau et tapez sur @ mipmap/"Le nom de votre image" (Cette étape se trouve dans l'onglet des attributs)

Cela devrait fonctionner!

Si vous avez besoin d'une description de contenu, je viens d'utiliser @ String/StringPicture

0
Tyler

mettre à jour votre plugin Gradle à 2.0+

// Gradle Plugin 1.5  
Android {  
     defaultConfig {  
          generatedDensities = []  
     }  

// This is handled for you by the 2.0+ Gradle Plugin  
     aaptOptions {  
          additionalParameters "--no-version-vectors"  
     }  

selon les lignes directrices de blog du développeur de Google

http://Android-developers.blogspot.in/2016/02/Android-support-library-232.html

0
ErShani

De, site de développement Android

Cette bibliothèque est maintenant une dépendance du v7 AppCompat library, permettant aux développeurs et à AppCompat d’utiliser facilement les dessins vectoriels.

Pour utiliser VectorDrawableCompat dans un contrôle ImageButton ou ImageView, , utilisez l'attribut XML app: srcCompat ou la méthode setImageResource ().

Pour que les ID d'attribut soient référencés au niveau 20 ou inférieur de l'API, ajoutez l'indicateur appt suivant à votre fichier de génération et de dégradé:

Si vous construisez avec Android Plugin pour Gradle 1.5.0 ou inférieur , ajoutez ce qui suit à votre build.gradle fichier:

Android {
  defaultConfig {
    // Stops the Gradle’s automatic rasterization of vectors
    generatedDensities = []
  }
   // Flag that tells aapt to keep the attribute ids
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}

Si vous construisez avec Android Plugin pour Gradle 2.0.0 ou supérieur , ajoutez ce qui suit à votre build.gradle fichier:

Android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}
0
Amit Vaghela

vous devez ajouter

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

à votre mise en page pour que cela fonctionne. Mon "app: srcCompat" a été surlignée en rouge jusqu'à ce que je l'ajoute.

0