Объект Modifier позволяет добавить компонентам возможность обработки нажатия. Для этого он предоставляет функцию clickable():
fun Modifier.clickable( enabled: Boolean = true, onClickLabel: String? = null, role: Role? = null, onClick: () -> Unit ): Modifier
Параметры функции:
enabled
: значение типа Boolean
, которое указывает, будет ли доступен компонент для нажатия. По умолчанию имеет значение
true
, то есть компонент будет доступен для нажатия. При значении false
обработка нажатий оключена.
onClickLabel
: предоставляет значение типа String?
и задает метку, с помощью которой можно быстро обратиться к компоненту.
По умолчанию равен null
role
: объект типа Role?, который устанавливает тип визуального элемента. По умолчанию равен null
onClick
: функция типа () -> Unit
, которая собственно и обрабатывает нажатие.
Например, определим простейшую обработку нажатия для компонента Text:
package com.example.helloapp import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.clickable import androidx.compose.material3.Text import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.unit.sp class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val count = remember{mutableStateOf(0)} Text("Clicks: ${count.value}", fontSize = 28.sp, modifier = Modifier.clickable( onClick = { count.value += 1 }) ) } } }
В данном случае мы определяем переменную count
, которая будет хранить количество нажатий.
Однако это не просто число. Она будет предоставлять - объект типа MutableState<Int>, который создается функцией
mutableStateOf(). В дальнейшем мы подробнее разберем объект MutableState
и функцию mutableStateOf, а пока достуточно знать, что в эту функцию передается собственно хранимое значение, которое затем можно получить
с помощью свойства value
объекта MutableState<T>
. А функция remember позволяет сохранить это значение.
Обратившись к свойству value
мы можем получить значение и вывести его в строке в компоненте Text:
Text("Clicks: ${count.value}"
А в функцию Modifier.clickable
через параметр onClick
передаем обработчик нажатия, котором это значение увеличивается на единицу:
onClick = { count.value += 1 }
В итоге при нажатии на компонент изменится значение в переменной count и соответственно изменится текст компонента Text.