Подтвердить что ты не робот

Разметка таблицы XML? Две строки EQUAL-width, заполненные кнопками с одинаковой шириной?

Здесь часть из моего XML для формата 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>

И теперь, чего я не получу - ШИРИНА одной строки, а также кнопки зависит от ТЕКСТА внутри кнопки. Если оба текста равносильны, давайте скажем: TEXT его хорошо - половина стола находится посередине экрана. Но если они имеют разный размер - скажем, "А" и "ЭТО БОЛЬШОЙ КНОПКОЙ", ЦЕНТР таблицы больше не находится посередине экрана, поэтому кнопки не равны ширине...

4b9b3361

Ответ 1

Чтобы иметь кнопки в строках, где кнопки имеют одинаковый размер, вам нужно сделать.

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

И залейте другие свойства xml для своих кнопок.

Магия находится в свойствах layout_weight и width. Вам не нужен макет таблицы. Эти свойства указывают макету, что ваши представления должны занимать равное пространство в родительском макете.

Ответ 2

Хороший пример (первоначально из http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html)

Протестировано и работает:

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

Ответ 3

В дополнение к принятому ответу:

У меня была аналогичная проблема, когда мне понадобилось несколько изображений в сетке с одинаковыми ширинами столбцов, поэтому я использовал макет таблицы. Он работал, но по мере того как изображения загружаются асинхронно, соответствующие столбцы занимают всю ширину, пока все столбцы не будут иметь по крайней мере одно изображение.

Я решил это с помощью решения Robby Pond, но он не работал для последней строки, которая не обязательно имела столько изображений, сколько другие строки, растягивая эти изображения, чтобы охватить все свободное пространство, когда я хотел, чтобы они вставляются в те же столбцы, что и выше. Чтобы бороться с этим, я заполнил оставшиеся пустые столбцы этой строки регулярными объектами View,

используя те же параметры компоновки, что и все другие изображения:

width = 0, weight = 1. И это решило!

Ответ 4

Фрагмент раскладки

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

Код, который программно устанавливает свойства макета кнопок в таблице:

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