2010-06-24 5 views
1

J'ai un TableLayout avec trois colonnes qui représente un formulaire avecDimensionnement de colonnes TableLayout

requiredSymbol | étiquette | champ de saisie.

Je veux que le champ de saisie pour remplir la largeur restante de l'écran droit à l'étiquette. Jusqu'à présent, la seule solution que je trouve est ce

<TableLayout android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:stretchColumns="2"> 
    <TableRow> 
        <TextView android:text="@string/requiredSymbol" 
           /> 
    <TextView android:text="@string/Name" 
           android:textColor="@color/orange" 
           android:gravity="left|center_vertical" 
     /> 
    <EditText android:id="@+id/contactName" 
     android:inputType="text|textPersonName" 
           android:ellipsize="end" 
          android:singleLine="true" 
          android:scrollHorizontally="true" 
          android:maxWidth="1sp" 
          /> 
    </TableRow> 

Le maxWidth doit être il y a une certaine valeur, qui est en fait ignoré. Alors la valeur stretchColumns fait bien son truc. Notez que cela fonctionne également si le contenu de l'EditText ferait sinon passer la table au-delà de la bordure de l'écran (imho un bug ..).

Cela fonctionne bien maintenant, mais semble un peu d'un hack pour moi. Y a-t-il un meilleur moyen?

Répondre

0

On dirait qu'il n'y a pas de meilleure façon à ce stade qui utilise les fichiers XML statiques. Cependant, j'ai changé depuis la mise en page de ne pas avoir une colonne séparée pour l'étiquette requise/icône et changé pour utiliser le message EditText # SetError combinée à une mise en œuvre de TextWatcher sur chaque champ, ce qui est beaucoup plus agréable de toute façon.

2

Essayez d'utiliser Android: layout_weight sur les colonnes, mais assurez-vous que vous définissez Android: stretchColumns dans le TableLayout. J'ai eu des problèmes avec TableLayout décidant unilatéralement de réduire les colonnes provoquant l'empaquetage de texte non désiré. Je ne suis pas sûr si l'utilisation de layout_weight et le rétrécissement de colonne unilatérale sont liés.

0

La façon dont j'ai réalisé ce fut en obtenant le width du champ EditText après est ajouté à la mise en page avec une largeur FILL_PARENT, puis en utilisant que pour régler le MaxWidth.

Il sort qui ressemble à ceci:

EditText exampleText = new EditText(this); 
exampleText.setText([Your Text]); 

//This says to fill width, but wrap content for the height 
//So it should expand to whatever you've set the MaxLines to be... 
LayoutParams exampleLP = new LayoutParams(FILL_PARENT, WRAP_CONTENT); 
[Parent].addView(exampleText, exampleLP); 

//Here is where it's actually setting the width. 
exampleText.setMaxWidth(exampleText.getWidth()); 

pas ma façon préférée, mais il est certainement fiable.

+0

Bien que cela puisse fonctionner je ne comme une solution en code. –

0

J'ai été en mesure d'obtenir l'EditText pour correspondre à la largeur restante en enveloppant le EditText dans un FrameLayout et en définissant le EditText à match_parent. Cela semble fonctionner pour Spinners aussi.

<TableLayout 
    android:shrinkColumns="1" 
    android:stretchColumns="1" > 

    <TableRow> 

     <!-- column 0 --> 
     <TextView 
      android:text="some text" /> 

     <!-- column 1 --> 
     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <EditText 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"/> 

     </FrameLayout> 

    </TableRow> 

</TableLayout> 
+0

Cela ne prend pas le symbole nécessaire qui pourrait ou ne pourrait pas être là en compte .. –