web-dev-qa-db-fra.com

Application dessin vectoriel Android: srcCompat ne montrant pas d'images

J'utilise une bibliothèque de support pour afficher des images vectorielles sur Android KitKat. Lorsque je teste mon application sur emulater, je ne vois aucune de ces images. J'ai créé une mise en page distincte pour Android Lollipop et versions ultérieures et tout s'est parfaitement bien déroulé (je pense que j'utilise l'attribut src au lieu de srcCompatHere est le code dans lequel je suis la bibliothèque de support usign.

<LinearLayout Android:layout_alignParentBottom="true"
Android:id="@+id/lake_detail"
Android:background="@drawable/my_fishing_plan_footer_line"
Android:orientation="horizontal"
Android:layout_width="match_parent"
Android:layout_height="90dp"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">

<RelativeLayout
            Android:layout_marginRight="3dp"
            Android:id="@+id/fire_logo"
            Android:layout_width="20sp"
            Android:layout_height="20sp">

            <ImageView
                Android:tint="#d74313"
                app:srcCompat="@drawable/circle_icon"
                Android:layout_width="30sp"
                Android:layout_height="30sp" />

            <ImageView
                Android:layout_centerVertical="true"
                Android:layout_centerHorizontal="true"
                app:srcCompat="@drawable/lauzaviete"
                Android:layout_width="25dp"
                Android:layout_height="25dp" />

        </RelativeLayout>

et c’est étrange car je vois les images sur la fenêtre d’aperçu du studio Android.

56
David

Réponse originale

Utilisez Android.support.v7.widget.AppCompatImageView au lieu de ImageView dans votre mise en page, comme ceci:

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

  <Android.support.v7.widget.AppCompatImageView
    Android:tint="#d74313"
    app:srcCompat="@drawable/circle_icon"
    Android:layout_width="30sp"
    Android:layout_height="30sp" />

  <Android.support.v7.widget.AppCompatImageView
    Android:layout_centerVertical="true"
    Android:layout_centerHorizontal="true"
    app:srcCompat="@drawable/lauzaviete"
    Android:layout_width="25dp"
    Android:layout_height="25dp" />
</LinearLayout>

Voir les documents AppCompatImageView_ ici et app:srcCompatici .

Assurez-vous également de ce qui suit:

Configurez votre build.gradle

Android {
  defaultConfig {
    vectorDrawables {
      useSupportLibrary = true
    }
  }
}

Docs: https://google.github.io/Android-gradle-dsl/current/com.Android.build.gradle.internal.dsl.VectorDrawablesOptions.html#com.Android.build.gradle.internal.dsl .VectorDrawablesOptions: useSupportLibrary

Étendez votre Activity avec AppCompatActivity

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

    setContentView(R.layout.activity_main);
  }
}

Lorsque vous utilisez app:srcCompat, assurez-vous de disposer des déclarations correctes dans votre présentation:

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

Facultatif (avertissement: veuillez lire la documentation): setCompatVectorFromResourcesEnabled dans votre Application classe

public class App extends Application {

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

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

Docs: _ ​​ https://developer.Android.com/reference/Android/support/v7/app/AppCompatDelegate.html#setCompatVectorFromResourcesEnabled(boolean) } _

160
Jared Burrows

J'ai eu un problème similaire et après avoir suivi toutes les étapes de la réponse de Jared Burrows le problème n'était pas résolu.

Il s'avère que l'espace de nom "app" dans mon fichier de mise en page a été défini comme suit:

xmlns:app="http://schemas.Android.com/tools"

au lieu de:

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

Après avoir changé cela, le problème a été résolu

13
D-C0d3r

utilisation:

Android:background="@drawable/circle_icon"

au lieu de:

app:srcCompat="@drawable/circle_icon"
2
Gouda Elalfy

Mettez en œuvre et app:srcCompact et vous pourrez ensuite l’utiliser sur la ImageView

implementation 'com.Android.support:appcompat-v7:28.0.0'

Assurez-vous de mettre en œuvre la bonne version.

Ensuite, dans votre build.gradle, définissez Android.defaultConfig.vectorDrawables.useSupportLibrary = true

defaultConfig {

    //...

    vectorDrawables {
        useSupportLibrary true
    }
}
0
Isaac Sekamatte

Incase quelqu'un d'autre rencontre ce problème et utilise androidx , puis essayez d'utiliser androidx.appcompat.widget.AppCompatImageView

0
nada

De plus, assurez-vous que votre dessin vectoriel se trouve dans drawable et non dans drawable-anydpi

Je me retrouve souvent avec des problèmes si les graphiques situés dans le dossier drawable-anydpi.

0
Fabi755

En résumé:

  1. Mettez un support vectoriel dans votre module (build.gradle)

    defaultConfig {           
         vectorDrawables.useSupportLibrary = true
     }
    
  2. Au lieu de Android:src="@drawable/icon", utilisez app:srcCompat="@drawable/icon"

  3. Assurez-vous que votre Activity extends AppCompatActivity sans cette étape n'est pas possible d'afficher une image vectorielle avec app:srcCompat

0
Gabriel Perez