Таблица

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.

Пример

  1. Создайте новый проект с названием HelloTableLayout.
  2. Откройте файл 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, который используется для рисования горизонтальной линии.

  3. Убедитесь, что ваш объект 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.

  4. Запустите приложение.

Вы должны увидеть следующее: