2010-03-08 9 views
2

A titre d'exemple: disons que j'ai 2 EditText s et un bouton que j'utilise comme un formulaire de connexion. Je veux les EditTexts à la même taille, l'un après l'autre, avec le login Button la moitié de leurs largeurs. Quelque chose comme ceci:Dimensionnement dynamique Vues en pourcentage (ou similaire)?

example login screenshot

La seule façon que je suis en mesure de trouver pour rendre le bouton 1/2 de la largeur (mais toujours maintenir son dimensionnement dynamique) est d'utiliser un TableLayout avec une vue vide comme le premier champ. Quelque chose comme ceci:

<TableLayout 
     android:stretchColumns="0,1" 
     android:shrinkColumns="0,1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/login_EditText_password"> 
     <TableRow> 
      <TextView 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" /> 
      <Button 
       android:text="@string/login_login" 
       android:id="@+id/login_Button_login" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" /> 
     </TableRow> 
    </TableLayout> 

qui se sent comme un hack emmerdant et il doit y avoir une meilleure façon. Connaissez-vous un?

+1

En fait, c'est une solution amusante, et je ne suis pas sûr qu'il ya une alternative beaucoup mieux. Vous pouvez utiliser un 'View' clair au lieu du' TextView' pour une performance un peu meilleure. – CommonsWare

Répondre

2

Habituellement layout_weight est utilisé pour atteindre percentage like behavior. Mais c'est généralement dans une vue parentale. Vous pourriez faire une vue vide pour prendre l'autre moitié dans cette situation, mais c'est un cas d'utilisation étrange de vouloir que le bouton soit la moitié de la largeur des champs ci-dessus.

Modifier, voici un exemple:

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/login_EditText_password" 
     android:orientation="horizontal"> 
     <View 
      android:layout_width="0dip" 
      android:layout_height="0dip" 
      android:layout_weight="1" /> 
     <Button 
      android:text="@string/login_login" 
      android:id="@+id/login_Button_login" 
      android:layout_width="0dip" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 
    </LinearLayout> 
+1

'android: layout_weight' ne fonctionnera que dans une ligne ou une colonne. – CommonsWare

+0

Un 'LinearLayout' horizontal avec une vue vide du poids 1 et le bouton de poids 1 est essentiellement ce que cette solution est en train de faire mais un peu plus léger et plus joli. – jqpubliq

+0

Ouais ... c'est un peu plus propre. Je vais modifier votre réponse pour fournir le code. Je ne peux pas croire que j'ai raté ça. –

Questions connexes