2010-05-19 11 views
36

Oto część z mojego XML do formatu lądzie:Układ tabeli XML? Dwa rzędy szerokości EQUAL wypełnione jednakowymi przyciskami szerokości?

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

A teraz co ja dont dostać - szerokość jednego rzędu, a także przycisku zależy od tekstu wewnątrz przycisku. Jeśli oba teksty są jednakowo długie, powiedzmy: TEKST jest ok - połowa stołu znajduje się pośrodku ekranu. Ale jeśli mają one inny rozmiar - powiedzmy "A" i "TO JEST DŁUGI PRZYCISK", to CENTRUM stołu nie jest już na środku ekranu, więc przyciski nie mają jednakowej szerokości ...

Odpowiedz

87

Aby mieć przyciski w rzędach, w których przyciski mają ten sam rozmiar, co musisz zrobić.

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

I wypełnij pozostałe właściwości xml dla przycisków.

Magia znajduje się we właściwościach layout_weight i width. Nie potrzebujesz układu tabeli. Te właściwości informują układ, że twoje widoki powinny zajmować równe miejsce w układzie nadrzędnym.

+0

W jaki sposób można ustawić te wartości w kodzie dynamicznie tworzonych przycisków? –

+0

parant.addView (newView, new LinearLayout.LayoutParams (0/* width * /, WRAP_CONTENT, 1/* weight * /)); –

+1

Jeśli znajdujesz to w wyszukiwarce, zwróć uwagę, że musisz zrobić android: layout_width = "fill_parent" lub inną wartość na LinearLayout. W trakcie wykonywania otrzymywałem błędy dotyczące sposobu określania szerokości układu i zajęło mi trochę czasu, aby dowiedzieć się, że narzekało ono na LinearLayout, a nie na zawarte elementy o zerowej szerokości układu. Zobacz także http: // stackoverflow.com/questions/1177020/android-how-to-make-all-elements-inside-linelayout-same-size. – Unoti

2

Oprócz przyjętej odpowiedź:

miałem podobny problem, gdzie potrzebne kilka obrazów w siatce z równych szerokości kolumn, więc użyłem układ tabeli. Udało się, ale ponieważ obrazy były ładowane asynchronicznie, odpowiednie kolumny zajmowały całą szerokość, dopóki wszystkie kolumny nie zawierają co najmniej jednego obrazu.

Rozwiązałem to, korzystając z rozwiązania Robby Pond, ale nie działało ono w ostatnim rzędzie, które niekoniecznie miało tyle zdjęć, ile w innych rzędach, rozciągając te obrazy, aby zajmować całą dostępną przestrzeń, kiedy chciałem je aby zmieścić się w tych samych kolumnach, co powyżej. Aby temu zapobiec, wpisałem pozostałych pustych kolumn tego wiersza z regularnym Zobacz obiektów

stosując te same parametry układu jak wszystkie inne obrazy:

width = 0, weight = 1. I rozwiązać go!

0

Fragment układ

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

Kod, który programowo ustawia właściwości układ przycisków w tabeli:

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

dobrym przykładem (pierwotnie z http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html)

przetestowane i pracy:

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