Aller au contenu

Positionnement dans un layout


Pierre87

Recommended Posts

C'est un layout utilisé dans une ListView

Je l'ai un poil simplifié pour l'exemple

   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="horizontal"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">
       android:orientation="vertical"
       android:layout_width="0dip"
       android:layout_height="wrap_content"
       android:layout_weight="1">
           android:id="@+id/text"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />

       android:layout_width="wrap_content"
       android:layout_height="fill_parent"
       android:layout_margin="5dip"
       android:orientation="vertical">
           android:id="@+id/comment"
           android:layout_width="30dip"
           android:layout_height="30dip" />
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:orientation="horizontal">
               android:id="@+id/friends"
               android:layout_width="20dip"
               android:layout_height="20dip"
               android:src="@drawable/lock"
               android:layout_gravity="bottom" />



J'ai donc un linear layout horizontal contenant :

- Un linear layout contenant du texte (sur plusieurs lignes, de taille variable), il prend toute la place disponible

- un linear layout vertical, sa largeur s'adapte à son contenu, dans lequel je veux placer :

- une image en haut

- une image en bas

Le problème, c'est que je n'arrive pas à avoir une image en haut, et l'autre en bas.

Soit j'ai les 2 en haut

Soit elles sont bien placées, mais si le texte est trop petit, les 2 images se chevauchent -.-

Vous avez une idée ? merci !

Lien vers le commentaire
Partager sur d’autres sites

En changeant de type de layout?

Exemple avec un RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

android:id="@+id/text"

android:layout_alignParentTop="true"

android:layout_alignParentLeft="true"

android:layout_alignParentBottom="true"

android:layout_toLeftOf="@id/image_droite" />

android:id="@+id/image_droite"

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:layout_margin="5dip"

android:orientation="vertical"

android:layout_alignParentRight="true" >

android:id="@+id/comment"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:layout_width="wrap_content"

android:layout_height="fill_parent"

android:gravity="bottom">

android:id="@+id/friends"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/lock" />

Lien vers le commentaire
Partager sur d’autres sites

Je pense que tu abuses largement des layout.. Tu en a fais de trop.

Essaye un LL horizontal qui contient un textview et un LL vertical.

Le second LL vertical contient lui 2 images de gravité top et bottom.

il faut simplifier au maximum ton xml.

Edit:

En fait ce que je dis est exactement la meme chose qu'axel, sauf que tu remplaces son relative layout par un linear layout!

Lien vers le commentaire
Partager sur d’autres sites

ouais, mais c'est dejà plus ou moins ce que j'ai

les LinearLayout en trop, c'est parce que j'ai au moins 5 autres éléments en plus :P

je vais essayer ton truc Profete, mais je crois que c'etait ce que je faisais lors de mon premier essai

et ça me "collait" mes 2 images en haut :/

j'ai l'impression que sur un LinearLayout vertical, on ne peut influer que sur le positionnement droite/gauche (horizontal) des éléments...

je me trompe ?

Lien vers le commentaire
Partager sur d’autres sites

voilà à quoi ressemble mon LinearLayout situé à droite

je n'ai pas vraiment 2 images, mais c'est pareil :P

       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_margin="5dip"
       android:orientation="vertical">
           android:id="@+id/comment"
           android:layout_width="30dip"
           android:layout_height="30dip"
           android:layout_gravity="top">
               android:id="@+id/comment_icon"
               android:layout_width="30dip"
               android:layout_height="30dip" />
               android:id="@+id/comment_count"
               android:layout_width="30dip"
               android:layout_height="22dip"
               android:textColor="#fff"
               android:gravity="center" />

           android:id="@+id/friends_only"
           android:layout_width="20dip"
           android:layout_height="20dip"
           android:src="@drawable/lock"
           android:layout_gravity="bottom" />

tous les Layout "au dessus" on un "layout_height" à "wrap_content"

je me doute que c'est à cause de ça que ça ne marche pas

mais si je les mets à "fill_parent", j'ai des chevauchements dans mes layouts :'(

je sais que c'est un peu moche pour le FrameLayout, mais c'est temporaire :D

Lien vers le commentaire
Partager sur d’autres sites

Je suis d'avis que tu pourras simplifier ça en restant sur des LinearLayout et en jouant sur les layout_weight pour "caler" les éléments.

Genre :

horizontal
+-----------------+---------------+
|                 |vertical       |
|                 |+-------------+|
|                 || weight = 1  ||
|                 |+-------------+|
|                 || weight = 0  ||
|                 ||             ||
|                 ||             ||
|                 |+-------------+|
|                 || weight = 1  ||
|                 |+-------------+|
+-----------------+---------------+

Ça ferait 2 LineraLayout imbriqués pour la mise en forme, et le reste c'est tes éléments actifs, donc ça ne me semble pas énorme pour une UI...

Modifié par naholyr
Lien vers le commentaire
Partager sur d’autres sites

Ce qui prend le moins de mémoire, essaie avec un simple "View" peut-être.

Mais du coup ça n'est pas aussi propre que je ne le pensais :( mais bon ça fait toujours une imbrication de moins que les solutions précédentes...

Lien vers le commentaire
Partager sur d’autres sites

au final j'ai ça :

       android:layout_width="wrap_content"
       android:layout_height="fill_parent"      <------ paramètre qui pose problème
       android:layout_margin="5dip"
       android:orientation="vertical">
           android:id="@+id/comment"
           android:layout_width="30dip"
           android:layout_height="30dip">
               android:id="@+id/comment_icon"
               android:layout_width="30dip"
               android:layout_height="30dip" />
               android:id="@+id/comment_count"
               android:layout_width="30dip"
               android:layout_height="22dip"
               android:textColor="#fff"
               android:gravity="center" />

           android:layout_width="wrap_content"
           android:layout_height="0dip"
           android:layout_weight="1" />
           android:id="@+id/friends_only"
           android:layout_width="20dip"
           android:layout_height="20dip"
           android:src="@drawable/lock" />

je rappelle que c'est juste une partie du layout d'une ligne dans une ListView

ça marche, mais pas toujours :D

tout dépend du "android:layout_height" du LinearLayout (celui le plus à l'extérieur dans mon code)

si je suis en "wrap_content", ça ne va pas, le LinearLayout au milieu ne peut pas s'étendre, et tout est collé en haut

si je suis en "fill_parent", c'est ok dans la plupart des cas, sauf si le reste du contenu de ma ligne est moins haut que le LinearLayout

en gros, j'ai mon FrameLayout qui vient "écraser" mon ImageView

Je crois que mon problème est insoluble :'(

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...