Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
224 of 502 menu
◀ ▶

Метод detectTapGestures

Метод detectTapGestures вызывают внутри PointerInputScope, то есть в лямбде pointerInput. Это suspend-функция: она ждёт события указателя, пока composable на экране. Короткое нажатие передают в onTap, долгое - в onLongPress.

Синтаксис

detectTapGestures( onTap = { offset -> }, )

Параметры

Параметр Описание
onTap Лямбда с координатой нажатия. Вызывается при отпускании.
onDoubleTap Лямбда при двойном tap.
onLongPress Лямбда при долгом нажатии.
onPress Suspend-лямбда в момент касания до отпускания.

Пример

Давайте сменим текст по одиночному tap:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.material3.Text import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var label by remember { mutableStateOf("abcde") } Text( text = label, modifier = Modifier.pointerInput(Unit) { detectTapGestures { label = if (label == "abcde") "12345" else "abcde" } }, ) } } }

На экране каждое нажатие по тексту переключит "abcde" и "12345".

Пример

Давайте сменим текст только по double tap:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.material3.Text import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.input.pointer.pointerInput class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { var label by remember { mutableStateOf("abcde") } Text( text = label, modifier = Modifier.pointerInput(Unit) { detectTapGestures( onDoubleTap = { label = if (label == "abcde") "12345" else "abcde" }, ) }, ) } } }

На экране один tap ничего не сделает, а двойной сменит строку на экране.

Смотрите также

  • метод detectDragGestures,
    который ловит перетаскивание вместо tap
  • класс PointerInputScope,
    где вызывают detectTapGestures
  • метод pointerInput,
    который открывает область для detect-методов
  • метод clickable,
    который даёт tap с ripple без pointerInput
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить