Чип

Компонент Chip представляет собой компактный интерактивный элемент интерфейса. Она представляет собой сложный объект, например контакт или тег, часто со значком и ярлыком. Его можно отметить, закрыть или нажать на него.

Ниже перечислены четыре типа чипов и описано, в каких случаях их можно использовать.

  • Помощь – помогает пользователю при выполнении задачи. Часто появляется как временный элемент интерфейса в ответ на ввод данных пользователем.
  • Фильтр. Позволяет пользователям отбирать контент по заданным параметрам. Их можно выбирать и отменять выбор. Если элемент выбран, рядом с ним может быть значок флажка.
  • Входные данные. Информация, предоставленная пользователем, например выбранный пункт меню. Они могут содержать значок и текст, а также кнопку X для удаления.
  • Подсказка. Рекомендации для пользователя на основе его недавних действий или введенных данных. Обычно появляются под полем ввода, чтобы побудить пользователя к действию.
Пример каждого из четырех компонентов чипа с выделенными уникальными характеристиками.
Рисунок 1. Четыре компонента чипа.

Поверхность API

Существует четыре функции, которые соответствуют четырем типам чипов. Ниже подробно описаны эти функции и их различия. Однако у них есть общие параметры:

  • label – строка, которая появляется на чипе.
  • icon – значок, который показывается в начале чипа. У некоторых компонентов есть отдельные параметры leadingIcon и trailingIcon.
  • onClick – функция Lambda, которую вызывает чип, когда пользователь нажимает на него.

Чип помощника

Composable-функция AssistChip позволяет легко создать чип подсказки, который направляет пользователя. Одна из отличительных особенностей этого leadingIconпараметра – возможность показывать значок слева от чипа. Ниже приведен пример реализации.

@Composable
fun AssistChipExample() {
    AssistChip(
        onClick = { Log.d("Assist chip", "hello world") },
        label = { Text("Assist chip") },
        leadingIcon = {
            Icon(
                Icons.Filled.Settings,
                contentDescription = "Localized description",
                Modifier.size(AssistChipDefaults.IconSize)
            )
        }
    )
}

Вот как это будет выглядеть:

Простой чип с ведущим значком и текстовой меткой.
Рисунок 2. Чип "Помощь".

Примененный фильтр

Для компонента FilterChip необходимо отслеживать, выбран ли чип. В примере ниже показано, как отображать значок с галочкой только после того, как пользователь выбрал чип.

@Composable
fun FilterChipExample() {
    var selected by remember { mutableStateOf(false) }

    FilterChip(
        onClick = { selected = !selected },
        label = {
            Text("Filter chip")
        },
        selected = selected,
        leadingIcon = if (selected) {
            {
                Icon(
                    imageVector = Icons.Filled.Done,
                    contentDescription = "Done icon",
                    modifier = Modifier.size(FilterChipDefaults.IconSize)
                )
            }
        } else {
            null
        },
    )
}

Если этот вариант не выбран, он будет выглядеть так:

Невыбранный фильтр с обычным фоном.
Рисунок 3. Невыбранный фильтр.

При выборе он выглядит так:

Выбранный фильтр с галочкой и цветным фоном.
Рисунок 4. Примененный фильтр.

Чип ввода

Компонуемый элемент InputChip позволяет создавать чипы, которые появляются в результате взаимодействия с пользователем. Например, в почтовом клиенте, когда пользователь пишет письмо, чип может представлять контакт, добавленный в поле "Кому".

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

@Composable
fun InputChipExample(
    text: String,
    onDismiss: () -> Unit,
) {
    var enabled by remember { mutableStateOf(true) }
    if (!enabled) return

    InputChip(
        onClick = {
            onDismiss()
            enabled = !enabled
        },
        label = { Text(text) },
        selected = enabled,
        avatar = {
            Icon(
                Icons.Filled.Person,
                contentDescription = "Localized description",
                Modifier.size(InputChipDefaults.AvatarSize)
            )
        },
        trailingIcon = {
            Icon(
                Icons.Default.Close,
                contentDescription = "Localized description",
                Modifier.size(InputChipDefaults.AvatarSize)
            )
        },
    )
}

Вот как это будет выглядеть:

Чип ввода с аватаром и значком в конце.
Рисунок 5. Чип ввода.

Кнопка подсказки

Компонуемый элемент SuggestionChip – самый простой из перечисленных на этой странице как по определению API, так и по распространенным вариантам использования. Чипы с подсказками содержат динамически сгенерированные подсказки. Например, в приложении для чата с ИИ можно использовать чипы с подсказками, чтобы предлагать варианты ответов на последнее сообщение.

Рассмотрим следующий пример реализации SuggestionChip:

@Composable
fun SuggestionChipExample() {
    SuggestionChip(
        onClick = { Log.d("Suggestion chip", "hello world") },
        label = { Text("Suggestion chip") }
    )
}

Вот как это будет выглядеть:

Простой вариант запроса.
Рисунок 6. Вариант запроса.

Чип "Выше нормы"

Во всех примерах в этом документе используются базовые функции, которые создают плоский интерфейс. Если вы хотите, чтобы чип выглядел более объемным, используйте один из трех следующих компонентов:

Дополнительные ресурсы