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 :

Position des custom View dans un LinearLayout


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Par défaut Position des custom View dans un LinearLayout
    Bonjour à tous,

    J'ai développé deux custom View que j'aimerais positionner l'un à côté de l'autre dans mon layout. J'utilise donc LinearLayout (potentiellement avec layout_weight) en me disant que mes View seront automatiquement positionné l'un à côté de l'autre.
    Seulement, je ne parviens pas à arriver à mes fins. Ma seconde View se superpose sur la première View et ont l'air d'avoir le même origine.

    J'ai testé le LinearLayout avec des simple TextView et je n'ai aucun problème à diviser mon écran en 4 par exemple, chaque TextLayout se positionne naturellement les uns à côté des autres.

    Voici mon main.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
    17
    18
    19
    20
    21
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/plank"
        android:orientation="horizontal"
        tools:context="${relativePackage}.${activityClass}" >
     
        <fr.test.drawing.WorldMapView
        android:id="@+id/worldmap"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" 
        android:layout_weight="3"/>
     
        <fr.test.drawing.ZoneInformationView
            android:id="@+id/zoneinfo"
            android:layout_width="wrap_content"
            android:layout_height="match_parent" 
            android:layout_weight="2"/>
     
    </LinearLayout>
    Mes 2 View surcharge les méthode onDraw() et onMeasure(). Les width et height à la sortie de onMeasure() sont bien ceux attendus. Chaque View contient une simple Bitmap taillé selon width et height (renvoyés par onMeasure). Et mes deux images se superposent...

    Etant en "wrap_content" dans les deux cas en width, comment est définie la taille du contenu à l'intérieur de mes View ?
    Qu'est-ce-que je rate ?

    Merci pour vos réponses. Je peux apporter plus d'infos si besoin!

  2. #2
    Membre expérimenté Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Par défaut
    Bonjour,

    Le positionnement de widget dans les layout a toujours été une horreur pour moi aussi ^^
    J'ai aussi eu pas mal de soucis avec le système de poids qui me fait des rendus parfois bizard...

    En règle générale, si tu veux un affichage facile a mettre en place et efficace, utilise le relativeLayout. Tu peux dire explicitement dire que tu souhaite que ton widget se trouve a droite d'un autre widget et tu n'a plus de probleme de superposition ou de mauvais alignement...

    PS: Je suis pas contre une explication clair de comment fonctionne les poids des vue sur l'interface

    GLHF

  3. #3
    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
    Normalement, le "weight" permet d'assigner une taille en fonction de la taille disponible une fois que les autres views ont été placées / mesurées.

    Par exemple, un layout horizontal de 300dp.
    Une ImageView A de 80dp (wrap_content)
    Un TextView B avec un weight de 1
    Un TextView C avec une taille de 100dp (wrap_content)
    Un TextView D avec un weight de 2.

    On aura comme résultat:
    A et C sont récupérés directement => 80dp et 100dp respectivement... reste donc 120dp dans le layout
    B et D sont calculés en fonction du weight => 40dp pour B, et 80dp pour D.

    Le Layout aura donc:
    A: 80dp
    B: 40dp
    C: 100dp
    D: 80dp


    Dans l'exemple ci-dessus, ZoneInformationView occupera donc 40% de l'espace disponible, et WorldMapView 60%...
    Donc sans même utiliser (à priori) la valeur retournée par le "onMeasure".




  4. #4
    Membre expérimenté Avatar de Altak
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 170
    Par défaut
    Re,

    Donc a priori, la taille du widget est égal a : son poid / la somme de tout les poids

    Le truc bizarre, c'est que quelque fois, cela me donne un comportement totalement inverse : plus c'est petit et plus ca prend de place 0o
    J'ai pas d'exemple precis a donner mais je penserais a poster la prochaine fois que cela m'arrive ^^

  5. #5
    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 en fait cela dépend aussi du "android:weightSum" du parent. Si pas renseigné, il est calculé automatiquement.

    En plus... si un "child" a un layout_width qui n'est pas à 0dp il est compté dans l'espace occupé....

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 104
    Par défaut
    Bonsoir Altak, bonsoir nicroman,

    J'ai suivi votre échange et mis à part quelques précisions, c'est ce que j'avais compris concernant le poids des différents composants.
    Mais cela ne résout pas mon problème...

    Dans l'exemple ci-dessus, ZoneInformationView occupera donc 40% de l'espace disponible, et WorldMapView 60%...
    Donc sans même utiliser (à priori) la valeur retournée par le "onMeasure".
    C'est bien ça le problème, je m'attendais à ce comportement et malheureusement mes deux View se superposent au lieu de suivre le 40/60 (que je surcharge ou pas onMeasure d'ailleurs...).

    A quoi peut être du ce comportement ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/12/2010, 14h47
  2. Détection position des yeux dans une image
    Par Morvan Mikael dans le forum Traitement d'images
    Réponses: 16
    Dernier message: 24/12/2008, 23h09
  3. Réponses: 3
    Dernier message: 29/05/2008, 11h59
  4. Position des lignes dans l'environnement align
    Par rahimk dans le forum Mathématiques - Sciences
    Réponses: 7
    Dernier message: 03/01/2007, 16h02
  5. [TP] La position des entiers dans un tableau
    Par argon dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 21/12/2006, 11h42

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