2010-12-02 6 views
7

J'essaye d'organiser 3 LinearLayouts, tel que l'un est justifié à gauche, un à droite, et le 3ème est entre les deux avec une quantité égale d'espace vide de chaque côté. Je pense que je les enveloppe dans un RelativeLayout pour accomplir ceci. Définissez ensuite une disposition à alignParentLeft et la deuxième mise en page à alignParentRight. Mais pour la troisième mise en page, je voudrais définir layout_marginLeft = (RelativeLayout.width - (layout1.width + layout2.width + layout3.width))/2. Cependant, je ne vois pas comment faire cela en XML. Aucune suggestion?Android: comment uniformément les composants de l'espace dans RelativeLayout?

* Modifier. Basé sur des suggestions, j'utilise maintenant un LinearLayout. Cela est plus proche de travailler, mais les 3 mises en page ne sont pas espacées uniformément, et la bonne mise en page n'est pas justifiée à droite. Ci-dessous mon xml:

<LinearLayout 
     android:id="@+id/toolbar" 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:paddingTop="4dip" 
     android:paddingBottom="4dip" 
     android:background="#50000000" 
     android:visibility="visible"> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="wrap_content" 
      android:layout_weight="1" 
      android:layout_height="wrap_content"> 
       <ImageButton 
        android:id="@+id/open" 
        android:src="@drawable/open" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"> 
       </ImageButton> 
     </LinearLayout> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="wrap_content" 
      android:layout_weight="1" 
      android:layout_height="wrap_content"> 
      <ImageButton 
       android:id="@+id/prev" 
       android:src="@drawable/prev" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
      </ImageButton> 
      <TextView 
       android:id="@+id/totalpages" 
       android:text="0 of 0" 
       android:layout_gravity="center" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="#FFFFFFFF"> 
      </TextView> 
      <ImageButton 
       android:id="@+id/next" 
       android:src="@drawable/next" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
      </ImageButton> 
     </LinearLayout> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_gravity="right" 
      android:layout_width="wrap_content" 
      android:layout_weight="1" 
      android:layout_height="wrap_content"> 
      <ImageButton 
       android:id="@+id/zoomout" 
       android:src="@drawable/zoomout" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
      </ImageButton> 
      <ImageButton 
       android:id="@+id/zoomin" 
       android:src="@drawable/zoomin" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
      </ImageButton> 
     </LinearLayout> 
    </LinearLayout> 

Répondre

12

Utilisez un LinearLayout au lieu de l'RelativeLayout et utiliser l'attribut layout_weight. Vous devrez peut-être régler le layout_width à 0dip puis régler le poids à quelque chose comme 0,33

Edit: Oui, vous pouvez utiliser un poids de 1 ou tout autre poids égal inférieur à 1. exemple

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="string 1 for test...." 
      /> 
    </LinearLayout> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
      android:text="string 2 for test...." 
      /> 
    </LinearLayout> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     > 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
     android:layout_gravity="right" 
      android:text="string 3 for test...." 
      /> 
    </LinearLayout> 
</LinearLayout> 
+0

Juste ajouter à cette réponse: Aller avec un LinearLayout (les trois LinearLayouts dans un LinearLayout), définir toutes les largeurs à fill_parent, et donner les trois dispositions intérieures 'android: layout_weight =" 1 "'. – kcoppock

+0

Merci, cela m'a rapproché, mais ne fonctionne pas tout à fait pour moi. Cela force les 3 versions linéaires à être toutes de la même taille, mais mes présentations linéaires ont des contenus différents. S'il vous plaît voir mon edit. – ab11

+0

Donc vous avez trois boutons et je devine que ces trois boutons n'ont pas la même largeur. Ce sera un cas délicat. Je suggère de baisser la taille de l'image de sorte que tous les boutons semblent bien et non recadrés. Regardez l'application twitter/facebook par exemple. Si ce n'est pas possible, décidez de la largeur minimale de chaque bouton et spécifiez-les [dépend de la taille de l'écran]. Et tout ce que je peux suggérer après c'est de jouer et de voir ce qui fonctionne le mieux pour vous. – achie

Questions connexes