首先,在不使用requiredX
或wrapContentX
参数的情况下,您无法在列、行、框等可组合项中测量大小大于Parnet的可组合项.这就是为什么您不能创建宽度为516.dp的Composable,而Parent Composable的宽度为400.dp.
下面的代码不会让BoxWithConstraints中的Box为150.dp,而Parent的大小为100.dp.
BoxWithConstraints(modifier = Modifier
.size(100.dp)
.border(3.dp, Color.Green)) {
Box(modifier = Modifier
.size(150.dp)
.background(Color.Red))
}
更多详细信息,你可以查看this answer.
其次,除非您需要size
或center
个参数,否则您的画布不需要有大小修改器来在其中绘制任何内容.在Jetpack Compose中,您可以在Composable之外绘制任何内容,除非您剪裁您的Composable.我在这里发布了关于画布尺寸修饰符的帖子
How to use IntrinsicSize.Min with canvas in jetpack compose个
无论画布大小是什么,在画布内以设置的任何半径绘制都会绘制它
@Preview
@Composable
private fun DrawSizeTest() {
Box(modifier = Modifier.fillMaxSize()) {
Canvas(modifier = Modifier
// I posted this to show that size of Canvas doesn't matter
// If you don't need to use size or center params
.size(0.dp)
.offset(x = (-190).dp, y = (200).dp)
.align(alignment = Alignment.BottomStart),
onDraw = {
drawCircle(color = Color.DarkGray, radius = 716.dp.toPx())
}
)
}
}