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 :

Question de layout


Sujet :

Composants graphiques Android

  1. #1
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut Question de layout
    Petite question de layout. J'essaie de mettre dans un layout vertical :
    - un TextView
    - un ensemble de boutons dans un layout externe horizontal
    - une ListView
    - un bouton

    Tout le monde, sauf la ListView, est en mode match_parent. Le problème est que quelque soit le mode de la ListView, le layout est... pourri. En fill_parent, on en voit rien à part la ListView, en match_content ou en match_parent, la listView étant vide par défaut, les autres éléments sont déformés. Il n'existe pas un mode "expand" comem ça existe dans Qt ? Ou alors je m'y prends du mauvais sens ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Pour cela, il faut utiliser les poids (weight).
    Le poids de ta ListView doit être à weight="1" (en supprimant l'attribut height). Tous les autres éléments doivent garder l'attribut height à wrap_content

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    OK, je vais voir ça... Les weight servent à quoi en fait ?

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Effectivement, c'est OK, merci ! Bon, encore d'autres soucis maintenant, mais bon, à chaque heure sa peine...

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Simon MARQUIS Voir le message
    Pour cela, il faut utiliser les poids (weight).
    Le poids de ta ListView doit être à weight="1" (en supprimant l'attribut height). Tous les autres éléments doivent garder l'attribut height à wrap_content
    Tiens, quand je supprime l'attribut height, j'ai un warning et tout part en sucette :/

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    L'attribut weight permet de définir le poids que va prendre un élément.
    Ainsi, tu peux distribuer des poids. Deux éléments de poids identiques dans un conteneur, prendront chacun la moitié de l'espace du conteneur.

    Dans un conteneur vertical (LinearLayout vertical) si tu utilises l'attribut weight, l'attribut height sera ignoré. Inversement, dans un layout horizontal, c'est l'attribut width qui sera ignoré.

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Bizarre, dans l'émulateur, plus son poids est important, moins la ListView prend de place. Un truc pas net :/

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Peux-tu nous montrer le layout que tu utilises ?

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Pas de souci :
    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
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/fullscreen_content"
        style="?buttonBarStyle"
        android:background="@color/black"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".SoundroidMain" >
     
        <TextView
            android:id="@+id/timeDisplay"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:layout_weight="1"
            android:enabled="true"
            android:gravity="center_horizontal"
            android:height="64dp"
            android:minHeight="48dp"
            android:scrollbars="none"
            android:textColor="#FFFFFF" />
     
        <include
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            layout="@layout/transport_layout" />
     
        <ListView
            android:id="@+id/main_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:textColor="@color/white" >
     
        </ListView>
     
        <include
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_weight="1"
            layout="@layout/menu_layout" />
     
    </LinearLayout>
    Les deux includes correspondent à deux layouts horizontaux qui contiennent des ImageButtons dont la taille est fixée (mais pas respectée par le layout général)

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Dans le cas présent, il me semble que les weight sont inutiles.

    Par contre, il se peut que le LinearLayout ait un peu de mal à étendre la ListView correctement. Personnellement je passerai par un RelativeLayout

    TextView: +id/timeDisplay alignParent=left,top,right
    Include (+id/inc1): alignParent=left,right below +id/timeDisplay
    Include (+id/inc2): alignparent=left,right,bottom
    ListView (+id/mainView): alignParent=left,right above +id/inc2 below +id/inc1

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ah... Je vais voir ça, merci !

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Pour autant, je pense que tu as mal saisi le concept de poids.
    Regarde la documentation officielle
    Tous les éléments de ton layout n'ont pas à utiliser les weight.
    Dans ton exemple, seul le widget ListView devrait en avoir un, égal à 1 et l'attribut height égal à 0dp.

    Si tu défini un attribut weight, Lint doit de dire de virer l'attribut height (ou de la mettre à 0dp)

  13. #13
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    En tout cas Eclipse ne me dit rien...

    J'en viens presque à regretter les outils GPGPU de nVidia quand je vois le bordel que c'est, le manque de documentation pour certaines classes. Par ex, le ArrayAdapter qui nécessite un TextView quelque part, c'est marqué nulle part dans la doc, et le BAseAdapter qui a aussi un truc du même style, mais encore une fois, aucun tutoriel et aucune doc ne mentionne ce qu'il faut.

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ben si pourtant: http://developer.android.com/referen...ayAdapter.html
    A concrete BaseAdapter that is backed by an array of arbitrary objects. By default this class expects that the provided resource id references a single TextView. If you want to use a more complex layout, use the constructors that also takes a field id. That field id should reference a TextView in the larger layout resource.
    BaseAdapter je ne pense pas, vu qu'il n'y a aucune gestion d'interface dans BaseAdapter.

    Et tu travailles avec quelles version de Eclipse / SDK ?
    Parceque je viens d'essayer... et dès que je mets layout_weight="1" sans virer le layout_height , j'ai bien un joli warning (Lint) qui apparaît dès le premier build (juste après avoir sauvé le fichier en "build auto")..

  15. #15
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est la version qui vient avec le SDK que j'ai téléchargé le mois dernier.

    Pour le texte, c'est peu clair pour moi, car aucun tutoriel sur le net n'indique cela, et encore moins passe une ressource TextView.

    Dingue, mais j'ai cherché une doc aussi détaillée, avec comment ajouter des éléments dans la liste sous-jacente, et j'ai vraiment dû ne pas avoir les yeux en face des trous pour ne jamais voir que cette classe a des méthodes pour modifier cette liste... Ou alors j'ai trop regardé BaseAdapter (qui est souvent conseillée pour des trucs plus avancés que ArrayAdapter).

    Bref, merci

Discussions similaires

  1. Question de Layout variable
    Par Oberown dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 24/01/2013, 13h47
  2. Question interface layout
    Par Gamergeo dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 02/07/2010, 10h52
  3. [WPF] Question de Layout avec binding.
    Par zeavan dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 14/02/2009, 14h41
  4. Une question de Layout pour les bons
    Par Alec6 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/03/2008, 09h53
  5. [Struts-layout] question sur la validation
    Par romdelf dans le forum Struts 1
    Réponses: 2
    Dernier message: 11/05/2006, 16h30

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