IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

[Erreur] Avec un layout en background


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Par défaut [Erreur] Avec un layout en background
    Bonjour,

    Je viens de rencontrer un problème sur une application que je suis entrain de créer. Pour des raisons pratiques, j'ai mis en background un relativeLayout, pour qu'il s'adapte en fonction de la taille de la fenêtre, mais cela ne fonctionne pas, car j'ai l'erreur suivante :

    "android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>"
    Voici mon main.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@layout/background"
        >
    </LinearLayout>
    Et mon background.xml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout 
        	android:id="@+id/relativeLayout1" 
        	android:layout_width="fill_parent" 
        	android:layout_height="fill_parent" 
        	xmlns:android="http://schemas.android.com/apk/res/android">
     
    	    <ImageView 
    	    	android:src="@drawable/background_bottom" 
    	    	android:layout_height="wrap_content" 
    	    	android:id="@+id/background_bottom" 
    	    	android:layout_alignParentBottom="true" 
    	    	android:layout_width="fill_parent">
    	    </ImageView>
        </RelativeLayout>
    Une idée de l'erreur ? J'ai cherché sur de nombreux forums anglais, dont certains décrivaient l'erreur comme étant un problème de chargement, sans en expliquer explicitement la solution.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 16
    Par défaut
    Je crois que j'ai eu cette erreur aujourd'hui et je l'ai corrigé en enlevant une ligne vide au début de mon fichier XML.

  3. #3
    Membre confirmé
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Par défaut
    Ce n'est malheureusement pas la solution, mais merci

    Je vous poste les caused by de l'erreur via logcat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Uncaught handler: thread main exiting due to uncaught exception
    java.lang.RuntimeException: Unable to start activity
    ComponentInfo{com.app.application/com.app.application.Application}: 
    Android.view.InflateException: Binary XML file line #2: Error inflating class 
    <unknown>
     
    Caused by: android.view.InflateException: Binary XML file line #2: Error 
    inflating class <unknown>
     
    Caused by: java.lang.reflect.InvocationTargetException
     
    Caused by: android.content.res.Resources$NotFoundException: File 
    res/layout/background.xml from drawable resource ID #0x7f030000
     
    Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: 
    invalid drawable tag RelativeLayout

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Bonjour,

    L'attribut android:background="@layout/background" doit recevoir un drawable (image, couleur, drawable xml), il ne peut recevoir comme valeur un layout XML.

  5. #5
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 835
    Par défaut
    Bonjour, je pense que background attend un drawable et toi tu lui donnes un RelativeLayout.

    T'as façon de faire est mauvaise.

    En fait il faut que tu créer un fichier xml dans le dossier drawable où tu mettras ton image, je vais rechercher, je l'ai déjà fais.

    Edit :
    Fais ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/scale1"
    android:tileMode="repeat"
    android:dither="true" />

  6. #6
    Membre confirmé
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Par défaut
    D'après ce que j'ai compris, et suivant ta réponse, le main.xml attend un drawable, mais pourtant, j'ai bien spécifié que c'était un layout attendu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    android:background="@layout/background"
    J'ai fait comme tu me l'a dit, en remplaçant par bitmap, et en enlevant relativelayout, et l'application ne plante plus (rien ne s'affiche en revanche).

    En fait, est il possible de faire un background en relativeLayout ? Car pour le moment j'ai mis une seule image, mais il y'en aura 2 plus tard, une en haut et une en bas. Ce que je veux, c'est que ces images restent à leur place quelque soit la résolution d'écran.

  7. #7
    Membre prolifique
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    10 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10 835
    Par défaut
    Moi j'ai l'impression que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Caused by: android.content.res.Resources$NotFoundException: File 
    res/layout/background.xml from drawable resource ID #0x7f030000
     
    Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: 
    invalid drawable tag RelativeLayout
    Ça veut dire que le problème est à l'intérieur de background.xml.
    Et qu'un RelativeLayout ce n'est pas un drawable.

    Peut être que tu pourras créer 2 layouts et dans un tu met une image en background et dans l'autre tu mets l'autre image.

  8. #8
    Membre chevronné
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Par défaut
    C'est surtout que si tu appel un background il doit être présent dans les drawable et pas dans le layout. Comme le dit l'erreur, il va chercher la ressource dans le fichier R dans le classe drawable, dedans tu as seulement les images que tu as dans tes fichier drawable.

    Il faut que tu fasse comme thierrybenji t'as expliqué, tu te crée un xml et tu met la balise qu'il faut est à l'intérieur l'image qu'il faut. Je l'ai utilisé moi et j'ai un truc de ce style:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="utf-8"?>
     
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
     
    	<item android:drawable="@drawable/btn_check_label_background" />
     
    </selector>

  9. #9
    Membre confirmé
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Par défaut
    Justement, c'est un background dynamique, d'où l'intérêt de le mettre dans drawable. Mais de toute façon, android n'accepte pas de xml avec un layout dans le background, d'après ce que j'ai pu comprendre. Il faudra que je m'y prenne autrement.

    Mais pour ta solution malgache, je ne peux pas lui dire de mettre une image en haut et une en bas.

    Merci quand même

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    En gros si je comprends bien, il y a une image header et une footer (en résumant) ? Elles ne doivent pas bouger et la vue scroll entre ses deux images ?

    Si c'est le cas pourquoi ne pas faire une image contenant les deux images (une en haut l'autre en bas) séparé par la couleur du backgroud souhaité, là sauvegarder en png et ensuite la reprendre avec 9patch pour la rendre étirable sur la partie background. Ensuite la placer en background d'un layout genre FrameLayout et placer les vues dans ce layout.

  11. #11
    Membre confirmé
    Homme Profil pro
    -
    Inscrit en
    Novembre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2007
    Messages : 64
    Par défaut
    J'ai enfin réussi à comprendre le principe de 9patch, malheureusement, en voulant le mettre dans l'application, cela bouleverse totalement ce que j'ai construit jusque là.

    Voici le code que j'ai constitué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 
    	android:id="@+id/relativeLayout1" 
    	android:layout_width="fill_parent" 
    	android:layout_height="fill_parent"
    	android:background="@color/backgroundColor" 
    	xmlns:android="http://schemas.android.com/apk/res/android">
     
    	<include
    	        layout="@layout/barreprinc"
    	        android:id="@+id/barreprinc"
    	        android:layout_alignParentTop="true" 
    	/>
    	<FrameLayout
    		android:id="@+id/FrameLayoutAccueil"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
    		android:background="@drawable/back"
    		android:layout_centerInParent="true">
    		<include
    			layout="@layout/accueil"
    		    android:id="@+id/milieu"
    		/>
    	</FrameLayout>
        <SlidingDrawer 
        	android:layout_width="fill_parent" 
        	android:id="@+id/slidingDrawerActu" 
        	android:layout_height="250dip" 
        	android:handle="@+id/handle" 
        	android:content="@+id/content" 
        	android:layout_alignParentBottom="true">
            <Button 
            	android:layout_width="fill_parent" 
            	android:text="@string/txtButtonNameSliders" 
            	android:layout_height="wrap_content" 
            	android:id="@+id/handle"
            	android:background="@+drawable/buttonactu">
            </Button>
      		<LinearLayout 
    	  		android:id="@+id/content" 
    	  		android:layout_width="fill_parent" 
    	  		android:layout_height="fill_parent"
    	  		android:background="@color/backgroundActu"
      		/>
        </SlidingDrawer>
     
    </RelativeLayout>
    J'explique brievement mon code, j'ai une barre en haut, appelée par le premier include barreprinc, 4 icones au milieu dans le FrameLayout, appelées par le deuxième include accueil, et un SlidingDrawers actu en bas .

    Le fond d'écran doit être dans la partie centrale de l'application, à savoir entre la barre du haut et le sliding du bas. Je l'ai donc déclaré dans le FrameLayout, sauf que le fond passe au premier plan et prend toute la largeur de l'écran.

    Quel que soit l'endroit où je le déclare, que ce soit dans le main ou dans accueil, le fond passe devant la barre du haut, et ne laisse qu'une seule icone visible sur les 4. Seul le sliding reste visible.

    Mon code n'est évidement pas bon, mais je ne vois pas mon erreur

Discussions similaires

  1. Layout responsive avec une image en background d'en-tête
    Par Erakis dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 15/02/2014, 08h04
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 16h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 16h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 22h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 01h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo