TableLayout – это ViewGroup, который показывает дочерние элементы View в строках и столбцах.
Примечание. Чтобы повысить производительность и улучшить поддержку инструментов, создайте макет с помощью ConstraintLayout.
TableLayout размещает дочерние элементы в строках и столбцах. Контейнеры TableLayout не отображают границы строк, столбцов или ячеек. В таблице будет столько столбцов, сколько ячеек в самой длинной строке. В таблице могут быть пустые ячейки. Ячейки могут охватывать несколько столбцов, как в HTML. Чтобы объединить столбцы, используйте поле span в классе TableRow.LayoutParams.
Примечание. Ячейки не могут охватывать несколько строк.
Объекты TableRow являются дочерними представлениями TableLayout (каждый объект TableRow определяет одну строку в таблице). В каждой строке может быть любое количество ячеек, каждая из которых определяется любым другим типом View. Таким образом, ячейки строки могут состоять из различных объектов View, таких как ImageView или TextView. Ячейка также может быть объектом ViewGroup (например, вы можете вложить другой TableLayout в качестве ячейки).
В следующем примере макета есть две строки и две ячейки в каждой. На скриншоте показан результат, в котором границы ячеек отображаются в виде пунктирных линий (добавлены для визуального эффекта).
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1"> <TableRow> <TextView android:text="@string/table_layout_4_open" android:padding="3dip" /> <TextView android:text="@string/table_layout_4_open_shortcut" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="@string/table_layout_4_save" android:padding="3dip" /> <TextView android:text="@string/table_layout_4_save_shortcut" android:gravity="right" android:padding="3dip" /> </TableRow> </TableLayout>
Столбцы можно скрывать, растягивать, чтобы заполнить доступное пространство на экране, или сжимать, чтобы таблица помещалась на экране. Подробная информация приведена в документации по TableLayout reference.
Пример
- Создайте новый проект с названием HelloTableLayout.
- Откройте файл
res/layout/main.xmlи вставьте в него следующий код:<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:stretchColumns="1"> <TableRow> <TextView android:layout_column="1" android:text="Open..." android:padding="3dip" /> <TextView android:text="Ctrl-O" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:layout_column="1" android:text="Save..." android:padding="3dip" /> <TextView android:text="Ctrl-S" android:gravity="right" android:padding="3dip" /> </TableRow> <TableRow> <TextView android:layout_column="1" android:text="Save As..." android:padding="3dip" /> <TextView android:text="Ctrl-Shift-S" android:gravity="right" android:padding="3dip" /> </TableRow> <View android:layout_height="2dip" android:background="#FF909090" /> <TableRow> <TextView android:text="X" android:padding="3dip" /> <TextView android:text="Import..." android:padding="3dip" /> </TableRow> <TableRow> <TextView android:text="X" android:padding="3dip" /> <TextView android:text="Export..." android:padding="3dip" /> <TextView android:text="Ctrl-E" android:gravity="right" android:padding="3dip" /> </TableRow> <View android:layout_height="2dip" android:background="#FF909090" /> <TableRow> <TextView android:layout_column="1" android:text="Quit" android:padding="3dip" /> </TableRow> </TableLayout>
Обратите внимание, как это напоминает структуру таблицы HTML. Элемент
TableLayoutпохож на элемент HTML<table>, аTableRow– на><tr>>. Для ячеек можно использовать любой элементView. В этом примере для каждой ячейки используетсяTextView. Между некоторыми строками также есть базовый элементView, который используется для рисования горизонтальной линии. - Убедитесь, что ваш объект Activity HelloTableLayout загружает этот макет в методе
onCreate():Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
Java
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Метод
setContentView(int)загружает файл макета дляActivity, указанный идентификатором ресурса –R.layout.mainотносится к файлу макетаres/layout/main.xml. - Запустите приложение.
Вы должны увидеть следующее: