Кликабельное поле делает его «некликабельным родительским полем» также кликабельным?

#kotlin #android-jetpack-compose

Вопрос:

Вот фрагмент кода:

 Box(
    Modifier
        .size(48.dp, 48.dp)
        .background(Color.Transparent)
        .align(Alignment.CenterEnd)
)
{
    Box(
        Modifier
            .size(height = 35.636363.dp, width = 41.818181.dp)
            .align(Alignment.CenterEnd)
            .clip(RoundedCornerShape(topStart = 20.dp, bottomStart = 20.dp))
            .clickable(onClick = {showDialogFragment.value = true})
            .background(Color.Red)
    )
}
 

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

Ответ №1:

В соответствии с руководящими принципами по материалам, минимальный размер прикосновения составляет 48.dp .

Начиная с версии 1.1.0-alpha03, когда вы добавляете обнаружение прикосновения к виду с размером, меньшим этого значения, отслеживание будет работать на увеличенном кадре.

Добавлен минимальный целевой размер касания в конфигурацию просмотра для использования в семантике и вводе указателей для обеспечения доступности.

Просто из любопытства вы можете проверить расширенную сенсорную панель для текущего представления pointerInput с помощью модификатора, который находится в разделе «Вся обработка прикосновений» в Compose:

 .pointerInput(Unit) {
    println("$extendedTouchPadding")
}