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 ma construction.gradle comme 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 vectorielles

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

, Il dit

Erreur: (14) aucun identifiant de ressource trouvé pour l'attribut 'srcCompat' dans paquet 'android'

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

35
demandé sur rmtheis 2016-02-26 09:39:51

10 réponses

Ne pas

android:srcCompat="@drawable/wallpaper"

Faire

app:srcCompat="@drawable/wallpaper"

Comme Ilsrccompat attribut est réellement défini dans AppCompat bibliothèque.

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 charpie qui peut être ignoré. J'ai essayé et ont la même d'erreur, mais il ne fonctionne pas correctement.

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

88
répondu Bhavesh Patadiya 2017-01-24 22:23:29

Combiner 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. Pas de peluches erreurs. Utiliser AppCompatImageView.

22
répondu Micro 2016-04-26 22:41:22

Premier (dans la construction.gradle)

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

Deuxième

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

C'est parti.

9
répondu Gark 2016-02-26 19:47:58

Appelez 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 gradle est 1.5

Mettez à niveau votre version Gradle .

Solution

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

Les drawables vectoriels vous permettent de remplacer plusieurs actifs png par un graphique vectoriel unique, défini en XML. Alors que précédemment limité à Lollipop et dispositifs supérieurs, à la fois VectorDrawable et AnimatedVectorDrawable sont maintenant disponibles via deux nouveaux supports Les bibliothèques de soutien-vecteur-drawable et soutien-animation-vecteur-drawable.

Ajoutez ceci

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

Vous remarquerez que ce nouvel attribut n'existe que dans la version 2.0 du Plugin Gradle. Si vous utilisez Gradle 1.5, vous utiliserez à la place

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

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

Aller À Travers Vecteurs De Support Un Drawable

3
répondu IntelliJ Amiya 2016-03-10 12:40:05

Je viens de changer:

app:srcCompat="@drawable/wallpaper"

À

android:src="@drawable/wallpaper"

Cela a fonctionné pour moi.

2
répondu vanquan223 2017-01-05 01:30:02

Vous utilisez android:srcCompat. Il devrait plutôt par app:srcCompat car c'est un attribut défini dans AppCompat, pas dans l'espace de noms android:.

1
répondu ianhanniballake 2016-02-26 06:53:27

Mettez à jour votre plugin gradle vers 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 GUID du blog du développeur google

Http://android-developers.blogspot.in/2016/02/android-support-library-232.html

0
répondu ErShani 2016-02-26 06:46:30

De, site développeur Android

Cette bibliothèque est maintenant une dépendance de la v7 AppCompat library, permettant aux développeurs et AppCompat d'utiliser facilement les drawables vectoriels.

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

Pour continuer à référencer les ID d'attribut au niveau de L'API 20 ou inférieur, ajoutez l'indicateur appt suivant à votre fichier build, gradle:

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

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 le Plugin Android pour Gradle 2.0.0 ou supérieur , ajoutez ce qui suit à votre build.fichier gradle:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}
0
répondu Amit Vaghela 2016-02-26 06:51:23

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é mis en surbrillance en rouge jusqu'à ce que je l'ajoute.

0
répondu Jonathan Laliberte 2017-05-20 19:30:27

Il y a plusieurs choses dont vous devez vous soucier Tout d'abord utiliser:

defaultConfig {
            vectorDrawables.useSupportLibrary = true
        }

Ou

vectorDrawables {
        useSupportLibrary = true
    }

Et d'autre part utiliser

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

Utilisez toujours AppCompatImageView ou Button car L'image vectorielle n'est pas prise en charge par ImageView Simple

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, étendez 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);
  }
}
0
répondu Null Pointer Exception 2018-07-03 06:03:53