Установить свойства элемента

Хотя конфигурация Grid определяет общую структуру, для управления положением, размером и выравниванием элементов внутри этой структуры используется модификатор gridItem .

Установить положение элемента

Поместите элемент в определенную дорожку или ячейку, указав параметры row и column .

Параметры row и column определяют индексы строк и столбцов, в которые помещается элемент. Индексы дорожек начинаются с единицы. Указание только row или column (но не обоих) помещает элемент в следующее доступное место в этой дорожке. Указание обоих индексов помещает элемент в эту ячейку.

Используйте положительное целое число, чтобы указать индекс дорожки с самого начала. Например, чтобы разместить элемент в первой строке и первом столбце, используйте gridItem(row = 1, column = 1) .

Используйте отрицательное целое число, чтобы указать направление относительно конца. Например, чтобы разместить элемент во второй с конца строке и столбце, используйте gridItem(row = -2, column = -2) .

В следующем примере карточка № 2 помещается во вторую строку и второй столбец. Карточка № 3 назначается в последнюю строку (с индексом -1), где она автоматически занимает первый доступный столбец в этой дорожке (Рисунок 1).

Grid(
    config = {
        repeat(2) {
            column(160.dp)
        }
        repeat(3) {
            row(90.dp)
        }
        gap(8.dp)
    }
) {
    Card1()
    Card2(modifier = Modifier.gridItem(row = 2, column = 2))
    Card3(modifier = Modifier.gridItem(row = -1, column = -2))
}

Карточка №2 помещается в ячейку сетки во второй строке и втором столбце, и карточка №3 помещается в первый столбец в третьей строке.
Рисунок 1. Карта № 2 помещается в ячейку сетки во второй строке и втором столбце, а карта № 3 помещается в первый столбец в третьей строке.

Охватывает строки и столбцы

Используйте параметры rowSpan и columnSpan , чтобы разместить элемент на нескольких ячейках. Вы можете разместить элемент пользовательского интерфейса в области сетки , которая представляет собой область, состоящую из нескольких ячеек сетки . Модификатор gridItem позволяет указать область сетки с помощью параметров rowSpan и columnSpan . В следующем примере карточка № 1 размещена в области, состоящей из двух строк и двух столбцов (Рисунок 2).

Grid(
    config = {
        repeat(3) {
            column(160.dp)
        }
        repeat(3) {
            row(90.dp)
        }
        rowGap(8.dp)
        columnGap(8.dp)
    }
) {
    Card1(modifier = Modifier.gridItem(rowSpan = 2, columnSpan = 2))
    Card2()
    Card3()
    Card4(modifier = Modifier.gridItem(columnSpan = 3))
}

Карточка №4 занимает три колонки.
Рисунок 2. Карточка №4 занимает три колонки.

Выровняйте объект в пределах сетки.

Выравнивание элемента пользовательского интерфейса в области сетки можно задать, указав его в параметре alignment модификатора gridItem . В следующем примере элемент #1 размещен в центре области сетки, состоящей из двух столбцов и двух строк.

Grid(
    config = {
        repeat(3) {
            column(160.dp)
        }
        repeat(3) {
            row(90.dp)
        }
        rowGap(8.dp)
        columnGap(8.dp)
    },
) {
    Text(
        text = "#1",
        modifier = Modifier
            .gridItem(
                rowSpan = 2,
                columnSpan = 2,
                alignment = Alignment.Center
            ),
    )
    Card2()
    Card3()
    Card4(modifier = Modifier.gridItem(columnSpan = 3))
}

Текст с номером #1 размещается в центре сетки, состоящей из двух строк и двух столбцов.
Рисунок 3. Текст с номером #1 расположен в центре сетки, состоящей из двух строк и двух столбцов.

Автоматическое размещение в сочетании с размещенными предметами

Элемент пользовательского интерфейса в Grid , не имеющий указания положения, размещается автоматически. В этом примере показано, как можно комбинировать элементы, размещаемые автоматически, и элементы пользовательского интерфейса с указанными ячейками сетки. Карточки № 2 и № 4 представляют собой указанные ячейки сетки, а остальные элементы размещаются автоматически.

Grid(
    config = {
        repeat(2) {
            column(160.dp)
        }
        repeat(3) {
            row(90.dp)
        }
        rowGap(16.dp)
        columnGap(8.dp)
    }
) {
    Card1()
    Card2(modifier = Modifier.gridItem(row = 2, column = 2))
    Card3()
    Card4(modifier = Modifier.gridItem(row = 3, column = 1))
    Card5()
    Card6()
}

Карта №3 размещается рядом с картой <b>№1</b>, поскольку это автоматическое размещение.
Рисунок 4. Карта № 3 размещается рядом с картой № 1 , поскольку это автоматическое размещение.