Android Compose - 如何删除 Switch 上方和下方的空间

Pho*_*gBM 2 android android-jetpack-compose jetpack-compose-switch android-compose-switch

我有Row两个组件,TextSwitch,添加后Switch,我看到上面和下面的空间。我希望 的高度Switch适合 UI 高度。

我使用padding(0.dp)但它不起作用。

如何删除它?

这是我的代码:

    Row(
        modifier = Modifier
            .fillMaxWidth()
            .background(color = Color.Red),
        horizontalArrangement = Arrangement.SpaceBetween,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(
            text = "This is a text",
            modifier = Modifier.background(color = Color.Yellow)
        )
        Switch(
            checked = false,
            onCheckedChange = {},
            modifier = Modifier
                .padding(0.dp)
                .background(color = Color.Blue)
        )
    }
Run Code Online (Sandbox Code Playgroud)

截屏

Gab*_*tti 9

与许多Switch其他组件一样,为了可访问性,也有最小触摸目标尺寸( 48.dp)。它与minimumInteractiveComponentSize修饰符一起应用。它将在组件外部包含额外的空间,以确保它们可以访问。

您可以查看文档

48.dp如果元素尺寸较小,则 至少保留尺寸以消除触摸交互的歧义。https://m2.material.io/design/usability/accessibility.html#layout-and-typography

这使用材料建议的最小尺寸48.dpx 48.dp,这可能与系统强制的最小尺寸不同。最小可点击/触摸目标尺寸(48.dp默认情况下)由系统通过ViewConfiguration控制,并在触摸输入层自动扩展。

您可以覆盖false应用于LocalMinimumInteractiveComponentEnforcement. 如果设置为,false则不会有多余的空间。

CompositionLocalProvider(LocalMinimumInteractiveComponentEnforcement provides false) {

        Switch(
            checked = switchState,
            onCheckedChange = { switchState = !switchState },
            modifier = Modifier
                .padding(0.dp)
                .background(color = Teal200)
        )
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

注意: LocalMinimumInteractiveComponentEnforcement至少需要M21.4.0-alpha04和M3 1.1.0-alpha04。之前就可以用LocalMinimumTouchTargetEnforcement同样的方法使用了。