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

Android Discussion :

Vue personnalisée XML


Sujet :

Android

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut Vue personnalisée XML
    Bonjour,

    J'ai crée une vue personnalisée (Classe qui extend View). Actuellement, je l'ajoute à mon ContentView avec la méthode addContentView().

    Je souhaite maintenant tout faire en xml. J'ai donc créé un xml :

    (Le nom de ma classe qui extends View est GView)

    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"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent" 
                  android:layout_height="fill_parent" 
                  android:orientation="vertical" >
    	
    	<TableLayout>...
    	</TableLayout>
    	
    	<GView 
    	    android:id="@+id/content"
    	    android:layout_width="fill_parent"
    	    android:layout_height="fill_parent"
            />
    </LinearLayout>

    Dans mon code java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this.setContentView(R.layout.main);
    this.mGView = (GView) findViewById(R.id.content);
    Visiblement, la partie rouge de mon xml ne fonctionne pas. Comment faire pour ajouter une vue peronnalisée au ContentView en passent par le xml?!

    Arca`

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    Indique le chemin complet de ta classe dans ton XML pour qu'il le retrouve.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    Salut, merci pour la réponse.

    J'ai donc testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	<com.dev.GView 
    	    android:id="@+id/content"
    	    android:layout_width="fill_parent"
    	    android:layout_height="fill_parent"
            />
    Il me cale une erreur :

    NoSuchMethodException: com.dev.GView.<init>(android.content.Context, android.util.AttributeSet)

    Mais sinon, je suis bien dans le vrai. On peut bien mettre des vues personnalisées dans le xml (appellées par leurs noms de classe) ?

    Par contre, en effet, ca peut être un problème de chemin car avec la completion, il ne me propose pas de "GView" comme balise. ni de com.dev.... non plus

  4. #4
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    Si j'ai bien compris. Il faut redéfinir le constructeur... je vais voir ca

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    J'avance un peu... en fait, il y a plusieurs sortes de constructeurs pour une vue

    View(Context context)
    Simple constructor to use when creating a view from code.

    View(Context context, AttributeSet attrs)
    Constructor that is called when inflating a view from XML.

    View(Context context, AttributeSet attrs, int defStyle)
    Perform inflation from XML and apply a class-specific base style.

    http://developer.android.com/referen...view/View.html

    Du coup, quand on créer une vue en java, on appelle le premier, et on ajoute la vue au content view grace à la méthode addContentView. Tout va bien.

    En XML, il fait appelle à la deuxieme, et comme c'est une vue personnalisée, il faut redéfinir le constructeur.
    Et là, je rebloque car les balises XML disponibles dans la classe View
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    android:minHeight="145px" 
    android:minWidth="145px"
    ne sont pas reconnues dans mon XML et donc, il ne retrouve pas ce qui lui permettrait de construire la vue (en particulier width and height)

    Je remets mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <com.dev.GView
    	android:id="@+id/content"
    	android:minHeight="145px" 
    	android:minWidth="145px"
    />
    Avec l'erreur : IllegalArgumentException: Width (0) and height (0) cannot be <=0

  6. #6
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    T'as essayé en mettant ça dans ton XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     android:layout_width="fill_parent"
    	    android:layout_height="fill_parent"

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Par défaut
    Citation Envoyé par MrDuChnok Voir le message
    T'as essayé en mettant ça dans ton XML :
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    1. Il faut utiliser le deuxieme constructeur.
    2. Utiliser les Layout WrapContent ou Fill_parent.
    3. Enlever les attributs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    android:minHeight="145px" 
    android:minWidth="145px"
    ; minHeight ou minWidth n'est pas definie dans ton attributs propre à toi. Soit tu les enleve ou tu les definis dans ton constructeur...

    Tu dois dimensioner ton View dans la classe qui s'etend de View avec canvas mais pas dans le xml. Ton view n'est pas une view natif android, il ne peut pas supporter les attributs android : height ou android :width, sauf si tu le definie pour toi meme avec le AttributSet qui se trouve dans ton construteur..
    Avec AttributSet tu peux definir tes propres attributs à ajouter dans le xml.


    Esperons t'avoir aidé.

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    Je trouve quand même dommage que ma vue ne supporte pas les attributs xml "natifs" vu qu'elle hérite de View, elle devrait hériter de toutes ses méthodes et donc de tous les attributs xml.

    Quoiqu'il en soit, c'est énorme de pouvoir définir ses propres attributs avec AttributeSet !

    Donc, ca y est, ca marche, en vrai, sur le mobile !
    Mais ce qui est bizarre, c'est que sous eclipse, dans l'espèce de petit simulateur qui permet de glisser déposer des Layout/View/etc pour aider à l'écriture du xml, je vois toujours la même erreur à l'écran :

    IllegalArgumentException: Width (0) and height (0) cannot be <=0

    Alors qu'en réél, ca marche tres bien. Un grand merci à vous !

    En résumé :
    1. Bien spécifier le nom du package pour la vue
    2. Utiliser le deuxieme constructeur
    3. Définir des AttributeSet si besoin mais pas nécéssaire pour une utilisation 'basique'
    *. Ne pas se fier à la complétion, il n'y en a pas !

  9. #9
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Bon bah tant mieux si ça fonctionne.
    Sur l'éditeur d'interface, y'a souvent des trucs qui marche pas...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 07/08/2014, 17h10
  2. Vue personnalisée et encodage UTF-8
    Par Janitrix dans le forum Zend Framework
    Réponses: 14
    Dernier message: 20/09/2007, 10h34
  3. vues personnalisées sous postgresql
    Par Dev_ps dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 12/06/2007, 11h22
  4. [RCP] Création de vue en XML
    Par jycronier dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 23/11/2006, 00h50
  5. [XSL] Différentes vues du XML
    Par clich dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/04/2005, 18h15

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