2010-05-19 13 views
36

Hier ist ein Teil von meinem XML für LAND-Format:XML-Tabellenlayout? Zwei EQUAL-width-Reihen mit gleich breiten Schaltflächen?

<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> 

Und jetzt, was mich nicht bekommen - die Breite einer Zeile und auch der Taste hängt von dem Text innerhalb der Taste. Wenn die beiden Texte gleich lang sind, sagen wir: TEXT ist in Ordnung - die Tischhälfte befindet sich in der Mitte des Bildschirms. Aber wenn sie eine andere Größe haben - sagen wir "A" und "DAS IST DER LANGE KNOPF", ist die MITTE der Tabelle nicht mehr in der Mitte des Bildschirms und so sind die Tasten nicht gleich breit ...

Antwort

87

zu haben Schaltflächen in Zeilen, in denen Schaltflächen die gleiche Größe haben, die Sie tun müssen.

<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> 

Und füllen Sie die anderen XML-Eigenschaften für Ihre Schaltflächen aus.

Die Magie liegt in den Eigenschaften layout_weight und width. Sie benötigen das Tabellenlayout nicht. Diese Eigenschaften teilen dem Layout mit, dass Ihre Ansichten im übergeordneten Layout den gleichen Platz einnehmen sollten.

+0

Wie kann man diese Werte in Code für dynamisch erstellte Schaltflächen festgelegt? –

+0

parant.addView (newView, neue LinearLayout.LayoutParams (0/* Breite * /, WRAP_CONTENT, 1/* Gewicht * /)); –

+1

Wenn Sie dies über die Suche finden, beachten Sie, dass Sie einen android: layout_width = "fill_parent" oder einen anderen Wert auf dem LinearLayout tun müssen. Ich bekam zur Laufzeit Fehler bezüglich der Angabe einer layout_width und es dauerte eine Weile, bis ich herausfand, dass sie sich über das LinearLayout beklagte, nicht über die enthaltenen Elemente mit den Nullwert-Layoutbreiten. Siehe auch http: // stackoverflow.com/Fragen/1177020/Android-How-To-Make-All-Elemente-Inside-Linearlayout-gleiche Größe. – Unoti

2

Neben der akzeptierte Antwort:

Ich hatte ein ähnliches Problem, wo ich mehrere Bilder in einem Raster mit gleich Spaltenbreiten benötigt, so habe ich ein Tabellenlayout. Es funktionierte, aber da die Bilder asynchron geladen wurden, nahmen die entsprechenden Spalten die gesamte Breite ein, bis alle Spalten mindestens ein Bild enthielten.

Ich löste dies mit der Robby Pond-Lösung, aber es funktionierte nicht für die letzte Zeile, die nicht unbedingt so viele Bilder wie die anderen Zeilen hatte, dehnte diese Bilder aus, um den gesamten verfügbaren Platz zu belegen, wenn ich sie wollte in die gleichen Spalten wie oben passen. Um dies zu bekämpfen, füllte ich die restlichen leeren Spalten dieser Zeile mit regulären Anzeigen von Objekten,

die gleichen Layout-Parameter, wie alle anderen Bilder mit:

width = 0, weight = 1. Und das löste es!

0

Das Layout Schnipsel

<TableLayout 
    android:id="@+id/tablelayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Der Code, der Layouteigenschaften von Tasten in der Tabelle programmatisch setzt:

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); 
    } 
} 
4

Nizza Beispiel (ursprünglich aus http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html)

getestet und funktioniert:

<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> 

Verwandte Themen