Как запретить Jetpack Compose увеличивать размер сенсорной цели?

В официальной документации говорится: «Когда размер интерактивного составного объекта меньше минимального размера сенсорной цели, 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.

1
0
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Скопируйте androidx.compose.ui.platform.AndroidViewConfiguration в проект.

  2. Переопределить метод.

    override val minimumTouchTargetSize: DpSize = DpSize(0.dp, 0.dp)

  3. Укажите местного провайдера.

     CompositionLocalProvider(
         LocalViewConfiguration provides CustomViewConfiguration(android.view.ViewConfiguration.get(this))
     ) {
         SmallBox()
     }
    

Другие вопросы по теме