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?
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.
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
.
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.
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
Je viens de changer:
app:srcCompat="@drawable/wallpaper"
À
android:src="@drawable/wallpaper"
Cela a fonctionné pour moi.
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:
.
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
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
}
}
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.
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);
}
}