В официальной документации говорится: «Когда размер интерактивного составного объекта меньше минимального размера сенсорной цели, Compose все равно увеличивает размер сенсорной цели», и приводится пример.
@Composable
private fun SmallBox() {
var clicked by remember { mutableStateOf(false) }
Box(
Modifier
.size(100.dp)
.background(if (clicked) Color.DarkGray else Color.LightGray)
) {
Box(
Modifier
.align(Alignment.Center)
.clickable { clicked = !clicked }
.background(Color.Black)
.size(1.dp)
)
}
}
Этот компонуемый элемент запускает изменение состояния, щелкнув 48dp вокруг центра поля. Отключение LocalMinimumInteractiveComponentEnforcement
не имеет никакого эффекта.
Как я могу предотвратить такое поведение, чтобы единственный способ переключить состояние — это щелкнуть центральное поле? Причина такого дизайна понятна, но я хотел бы изучить возможности Jetpack Compose.
Скопируйте androidx.compose.ui.platform.AndroidViewConfiguration
в проект.
Переопределить метод.
override val minimumTouchTargetSize: DpSize = DpSize(0.dp, 0.dp)
Укажите местного провайдера.
CompositionLocalProvider(
LocalViewConfiguration provides CustomViewConfiguration(android.view.ViewConfiguration.get(this))
) {
SmallBox()
}