Voici une partie de mon format XML for LAND:
<TableLayout
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:layout_gravity="center"
Android:stretchColumns="*">
<TableRow>
<Button
Android:id="@+id/countbutton"
Android:text="@string/plus1"/>
<Button
Android:id="@+id/resetbutton"
Android:text="@string/reset"
/>
</TableRow>
</TableLayout>
Et maintenant, ce que je ne comprends pas - la LARGEUR d’une rangée et du bouton dépend du TEXTE à l’intérieur du bouton. Si les deux textes ont la même longueur, disons: TEXT c'est bon - la moitié du tableau est au milieu de l'écran. Mais s'ils ont une taille différente - disons "A" et "CECI IS LE BOUTON LONG", le CENTRE de la table n'est plus au milieu de l'écran et les boutons ne sont donc pas également larges ...
Pour avoir des boutons en rangées où les boutons ont la même taille, vous devez le faire.
<LinearLayout Android:orientation="horizontal"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<Button Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:layout_width="0dip"/>
<Button Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:layout_width="0dip"/>
</LinearLayout>
Et remplissez les autres propriétés XML pour vos boutons.
La magie réside dans les propriétés layout_weight et width. Vous n'avez pas besoin de la disposition de la table. Ces propriétés indiquent à la présentation que vos vues doivent occuper un espace égal dans la présentation parent.
Bel exemple (originellement de http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html )
Testé et fonctionnel:
<TableRow>
<!-- Column 1 -->
<TextView
Android:id="@+id/tbl_txt1"
Android:layout_width="0dip"
Android:layout_height="wrap_content"
Android:background="@color/red"
Android:textColor="@color/white"
Android:padding="10dip"
Android:layout_margin="4dip"
Android:layout_weight="1"
Android:text="Column 1" />
<!-- Column 2 -->
<TextView
Android:id="@+id/tbl_txt2"
Android:layout_width="0dip"
Android:layout_height="wrap_content"
Android:background="@color/red"
Android:textColor="@color/white"
Android:padding="10dip"
Android:layout_margin="4dip"
Android:layout_weight="1"
Android:text="Column 2" />
<!-- Column 3 -->
<TextView
Android:id="@+id/tbl_txt3"
Android:layout_width="0dip"
Android:layout_height="wrap_content"
Android:background="@color/red"
Android:textColor="@color/white"
Android:padding="10dip"
Android:layout_margin="4dip"
Android:layout_weight="1"
Android:text="Column 3" />
</TableRow>
En plus de la réponse acceptée:
J'ai eu un problème similaire où j'avais besoin de plusieurs images dans une grille avec des largeurs de colonne égales, alors j'ai utilisé une disposition de tableau. Cela fonctionnait, mais comme les images étaient chargées de manière asynchrone, les colonnes correspondantes occuperaient toute la largeur jusqu'à ce que toutes les colonnes contiennent au moins une image.
J'ai résolu ce problème en utilisant la solution de Robby Pond, mais cela n'a pas fonctionné pour la dernière ligne, qui ne contenait pas nécessairement autant d'images que les autres lignes. mêmes colonnes que ci-dessus. Pour lutter contre cela, j'ai rempli les colonnes vides restantes de cette ligne avec des objets View normaux,
en utilisant les mêmes paramètres de mise en page que toutes les autres images:
width = 0, weight = 1.
Et ça l'a résolu!
L'extrait de mise en page
<TableLayout
Android:id="@+id/tablelayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
Le code qui définit par programme les propriétés de disposition des boutons dans la table:
public void addButtons(View view) {
TableLayout tableLayout = (TableLayout) findViewById(R.id.tablelayout);
Context context = getApplicationContext();
tableLayout.removeAllViews();
for (int rowIndex = 0; rowIndex < ROWS; rowIndex++) {
TableRow row = new TableRow(context);
for (int columnIndex = 0; columnIndex < COLUMNS; columnIndex++) {
Button btn = new Button(context);
LayoutParams buttonParams = new LayoutParams(0,
LayoutParams.WRAP_CONTENT, 1f);
btn.setLayoutParams(buttonParams);
row.addView(btn);
}
tableLayout.addView(row);
}
}
Essayez ceci: Testé et fonctionnel:
1) Pour tablelayout set Android: stretchColumns = "1"
2) Définissez également chaque élément (colonne) layout_width = "0dip" et layout_weight = "1"
3) Et ne définissez pas layout_width of tablerow
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools" Android:layout_width="match_parent"
Android:layout_height="match_parent" Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
Android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="inext.smartshop.CustomerProfile.CustomerProfileView">
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/tablelayout"
Android:stretchColumns="1"
Android:layout_above="@+id/userProfilebtnsignout"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentEnd="true"
Android:layout_below="@+id/relativeLayout">
<TableRow
Android:layout_height="fill_parent"
Android:padding="5dp"
Android:id="@+id/detailsTableRow"
Android:gravity="center_horizontal">
<TextView
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:text="Full Name : "
Android:layout_width="0dip"
Android:layout_weight="1"
Android:id="@+id/textView8"
Android:gravity="right" />
<TextView
Android:layout_width="0dip"
Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:text="Ram Chhabra"
Android:id="@+id/userProfilename"
Android:gravity="left" />
</TableRow>
<TableRow Android:padding="5dp"
Android:layout_height="wrap_content">
<TextView
Android:layout_width="0dip"
Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:text="Email Address : "
Android:id="@+id/textView10"
Android:gravity="right" />
<TextView
Android:layout_width="0dip"
Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:text="[email protected]"
Android:id="@+id/userProfileemail"
Android:gravity="left"
/>
</TableRow>
<TableRow Android:padding="5dp">
<TextView
Android:layout_width="0dip"
Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:text="Contact No 1 : "
Android:id="@+id/textView12"
Android:gravity="right" />
<TextView
Android:layout_width="0dip"
Android:layout_weight="1"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceSmall"
Android:text="8130032232"
Android:id="@+id/userProfilecontactone"
/>
</TableRow>
</TableLayout>
</RelativeLayout>
</RelativeLayout>