kotlin 在Jetpack合成中 Package 内容

qmelpv7a  于 2022-12-04  发布在  Kotlin
关注(0)|答案(2)|浏览(214)

如何使父布局-Box在Jetpack compose中 Package 其内容?下面的当前实现填充了整个屏幕,我只希望Box Package 其子布局-Switch。如何为Box定义 * Package 内容 *?

@Composable
fun TestScreen(modifier: Modifier = Modifier) {
    Box(modifier = Modifier.background(Color.Yellow)){
        val switchState = remember { mutableStateOf(true) }
        Switch(
            checked = switchState.value,
            enabled= true,
            onCheckedChange = { switchState.value = it }
        )
    }
}

ewm0tg9j

ewm0tg9j1#

你在屏幕上看到的不是关于Modifier.wrapContentSize的。Modifier.wrapContentSize和没有大小修饰符返回相同的约束。你可以查看这个答案的Constraints部分。
为什么你的盒子覆盖整个屏幕可能是更狡猾的东西,你有一个带有Modifier.fillMaxSize()的Surface作为TestScreen的直接父级。
表面是一个带有propagateMinConstraints: Boolean = true的盒子,它强制其直接后代具有最小宽度和高度。This answer用例子解释了它是如何工作的。
你的组合实际上是这样的,当父不是表面,如我上面提到的。

Surface(
    modifier = Modifier.fillMaxSize()
) {
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(10.dp)
    ) {
        TestScreen()
    }
}

uplii1fm

uplii1fm2#

修饰符有可以使用的wrapContentSize

Box(
        modifier = Modifier
            .background(Color.Yellow)
            .wrapContentSize() // wrap content height and width
    ){
        val switchState = remember { mutableStateOf(true) }
        Switch(
            checked = switchState.value,
            enabled= true,
            onCheckedChange = { switchState.value = it }
        )
    }

相关问题