2010-11-04 8 views
2

Je n'arrive pas à comprendre pourquoi je dois faire pour aligner parfaitement mes vues dans un TableLayout.Pourquoi ces vues ne sont-elles pas alignées?

J'ai une disposition similaire à ceci:

<TableLayout android:id="@+id/keyboard" 
    android:layout_width="fill_parent" 
    android:layout_height="378px"> 
    <TableRow android:layout_span="5" > 
     <TextView android:id="@+id/button20" 
      android:layout_width="63px" 
      android:layout_height="42px" 
      android:textSize="10" 
      android:text="L1" /> 
     <TextView android:id="@+id/button21" 
      android:layout_width="63px" 
      android:layout_height="42px" 
      android:textSize="12" 
      android:text="L2" /> 
     <TextView android:id="@+id/button22" 
      android:layout_width="63px" 
      android:layout_height="42px" 
      android:textSize="12" 
      android:text="L3" /> 
     <TextView android:id="@+id/button23" 
      android:layout_width="63px" 
      android:layout_height="42px" 
      android:textSize="12" 
      android:text="L4" /> 
     <TextView android:id="@+id/button24" 
      android:layout_width="63px" 
      android:layout_height="42px" 
      android:textSize="12" 
      android:text="L5" /> 
    </TableRow> 
</TableLayout> 

Maintenant, quand il est dessiné, la première TextView est affiché 2 pixels inférieurs que tous les autres. Substitution de la méthode onLayout; Je vois que onLayout est appelé pour la première vue avec: top = 2; bas = 44; alors que tous les autres sont top = 0; bottom = 42.

Cela se produit lorsque la taille de la police est légèrement différente des autres; ou si le texte s'enroule sur une autre ligne (car elle ne rentre pas dans la largeur). Tous les TextView ont les mêmes dimensions; mais certains sont affichés légèrement plus bas que l'autre.

Cette disposition est dans un RelativeLayout si cela fait une différence.

J'ai essayé beaucoup de combinaisons différentes, et il y a toujours des différences. Toute aide sera grandement appréciée.

Merci! JY

Répondre

3

Il semble que les vues de texte soient alignées sur leurs lignes de base. Donc, si un texte est plus petit, sa ligne de base sera plus élevée dans le texte. Par conséquent, le textview sera positionné plus bas pour correspondre à la ligne de base des autres textviews avec un texte plus grand.

Pour éviter l'alignement de base de la ligne, essayez de changer la ligne TableRow à:

<TableRow android:layout_span="5" android:baselineAligned="false" > 

L'inconvénient est bien entendu que les textes ne peuvent pas regarder alignés plus.

+1

merci, merci, merci ... était tellement concentré sur la taille de chaque point de vue que je n'avais pas remarqué que la ligne de base du texte étaient tous alignés ... – jyavenard

+0

Ancienne réponse depuis des temps immémoriaux, mais toujours pertinent! –

Questions connexes