Разметка таблицы 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 его хорошо - половина стола находится посередине экрана. Но если они имеют разный размер - скажем, "А" и "ЭТО БОЛЬШОЙ КНОПКОЙ", ЦЕНТР таблицы больше не находится посередине экрана, поэтому кнопки не равны ширине...
Ответы
Ответ 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);
}
}