2010-05-19 12 views
36

Ecco una parte del mio XML per il formato TERRA:Layout tabella XML? Due righe di uguale larghezza riempite con pulsanti ugualmente larghi?

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

E ora che io non ottenere - la larghezza di una riga e anche del tasto dipende dal testo all'interno del pulsante. Se entrambi i testi sono uguali a lungo, diciamo: TEXT è ok - la metà del tavolo si trova nel mezzo dello schermo. Ma se hanno dimensioni diverse - diciamo "A" e "QUESTO È IL LUNGO BOTTONE" il CENTRO del tavolo non si trova più al centro dello schermo e quindi i pulsanti non sono ugualmente larghi ...

risposta

87

Per avere pulsanti in righe in cui i pulsanti hanno le stesse dimensioni che devi fare.

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

E inserire le altre proprietà xml per i pulsanti.

La magia è nelle proprietà layout_weight e width. Non hai bisogno del layout della tabella. Queste proprietà dicono al layout che le tue viste dovrebbero occupare lo stesso spazio nel layout principale.

+0

Come si fa ad impostare questi valori nel codice per i pulsanti create dinamicamente? –

+0

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

+1

Se stai riscontrando questo tramite la ricerca, tieni presente che devi eseguire un android: layout_width = "fill_parent" o altro valore su LinearLayout. Stavo ricevendo errori in fase di esecuzione su come ho bisogno di specificare un layout_width, e mi ci è voluto un po 'per capire che si lamentava del LinearLayout, non degli elementi contenuti con le larghezze del layout di valore zero. Vedi anche http: // StackOverflow.com/domande/1177020/android-how-to-make-tutti-elementi-dentro-LinearLayout-stessa-size. – Unoti

2

Oltre alla risposta accettata:

Ho avuto un problema simile dove dovevo diverse immagini in una griglia con larghezze uguali colonne, quindi usato un layout di tabella. Funzionava, ma poiché le immagini venivano caricate in modo asincrono, le colonne corrispondenti avrebbero occupato l'intera larghezza finché tutte le colonne avessero almeno un'immagine in esse.

Ho risolto questo problema utilizzando la soluzione di Robby Pond, ma non ha funzionato per l'ultima riga, che non aveva necessariamente tante immagini quante le altre righe, allungando quelle immagini per occupare tutto lo spazio disponibile quando volevo per adattarsi alle stesse colonne di cui sopra. Per combattere questo, ho riempito le restanti colonne vuote di tale riga con regolare Visualizzare oggetti,

utilizzando gli stessi parametri di layout come tutte le altre immagini:

width = 0, weight = 1. Ed risolto!

0

Il layout frammento

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

Il codice che imposta programmazione proprietà di layout dei pulsanti nella tabella:

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

Bell'esempio (originariamente da http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html)

provati e funzionare:

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

Problemi correlati