2011-06-16 4 views
9

Je suis en train d'aligner 3 vues texte dans un tablerow comme celui-ci:Harmoniser TextViews dans un TableRow

|------------------------------------------------| 
| {TextView1} {TextView2}   {TextView3} | 
|------------------------------------------------| 

// TextView 1, 2 Left aligned 
// TextView 3 Right aligned 

En outre, la ligne de tableau doivent remplir la largeur de la table.

Avec le code ci-dessous, je ne peux y parvenir:

|------------------------------------------------| 
| {TextView1} {TextView2} {TextView3}   | 
|------------------------------------------------| 

code I:

TableRow tr = new TableRow(myActivity.this); 

TextView tvLeft = new TextView(myActivity.this); 
tvLeft.setText(values[0]); 

TextView tvCenter = new TextView(myActivity.this); 
tvCenter.setText(values[1]); 

TextView tvRight = new TextView(myActivity.this); 
tvRight.setText(values[2]); 
tvRight.setGravity(Gravity.RIGHT); 

tr.addView(tvLeft); 
tr.addView(tvCenter); 
tr.addView(tvRight); 

myTable.addView(tr); 

La vue droite texte ne gravitait à droite, et la ligne de table ne remplit pas la largeur de la table. Dois-je utiliser des poids sur les vues de texte?

Edit: Ajouté TableLayout:

<TableLayout 
android:layout_height="wrap_content" 
android:id="@+id/myTable" 
android:layout_width="fill_parent" 
> 
</TableLayout> 
+0

+1 pour la mise en forme agréable –

+1

Je pense que mieux d'utiliser une disposition relative ici –

+0

@Labeeb pouvez-vous s'il vous plaît donner des détails. –

Répondre

8

un second coup

Je ne suis pas sûr que vous créez le TableLayout programme ou en XML ou ce que les propriétés sont, mais il semble que vous voulez

(en Java)

myTable.setColumnStretchable(2, true); 

(en XML)

android:stretchColumns="2" 
+0

Est-ce que le fait de placer les TextViews dans un RelativeLayout dans le TableRow, et d'utiliser l'alignement relatif serait une meilleure solution? –

+0

Dans ce cas, je ne pense pas que ce soit important - quoi que vous soyez plus à l'aise. Si vous formiez un LinearLayout à la place du TableRow, je suggérerais de faire de RelativeLayout un ensemble pour éviter l'imbrication inutile, mais vous ne pouvez pas vraiment le contourner dans ce cas. –

+0

L'utilisation d'un LinearLayout avec des paramètres FILL_PARENT entraîne la disparition de TextView. La même chose arrive si j'utilise les paramètres WRAP_CONTENT. –

1

Je pense que la disposition relative est meilleure. Essayez cette

RelativeLayout tr = new RelativeLayout(myActivity.this); 

    TextView tvLeft = new TextView(myActivity.this); 
    tvLeft.setText(values[0]); 

    TextView tvCenter = new TextView(myActivity.this); 
    tvCenter.setText(values[1]); 

    TextView tvRight = new TextView(myActivity.this); 
    tvRight.setText(values[2]); 

    tr.addView(tvLeft); 

    RelativeLayout.LayoutParams relativeLayoutParamsCenter = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    relativeLayoutParamsCenter.addRule(RelativeLayout.RIGHT_OF, tvLeft.getId()); 
    tr.addView(tvCenter,relativeLayoutParamsCenter); 

    RelativeLayout.LayoutParams relativeLayoutParamsRight = new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);   
    relativeLayoutParamsRight.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);  
    tr.addView(tvRight,relativeLayoutParamsRight); 

    myTable.addView(tr); 
+0

Je prévois d'ajouter plusieurs de ces "lignes" RelativeLayout à ma table. Avez-vous besoin de spécifier pour chaque ligne qu'elle est en dessous de la dernière? –