我举一个例子,以下是一个可组合的函数:
@Composable
fun CustomCanvas(
) {
Box(
Modifier
.aspectRatio(1.33f)
.fillMaxWidth())
}
合成后如何知道该对象的大小?
为什么我想知道: 我正在尝试调整并放置画布上的图像。这需要知道画布的大小。不过,我不想硬编码画布的大小。应该如何做到这一点?
我举一个例子,以下是一个可组合的函数:
@Composable
fun CustomCanvas(
) {
Box(
Modifier
.aspectRatio(1.33f)
.fillMaxWidth())
}
合成后如何知道该对象的大小?
为什么我想知道: 我正在尝试调整并放置画布上的图像。这需要知道画布的大小。不过,我不想硬编码画布的大小。应该如何做到这一点?
您可以使用 onGloballyPositioned
修饰符:
var size by remember { mutableStateOf(IntSize.Zero) }
Box(Modifier.onGloballyPositioned { coordinates ->
size = coordinates.size
}) {
//...
}
另外,Canvas
具有 DrawScope
,它具有 size
属性。
Canvas() {
val canvasSize = size
}
BoxWithConstraints
并不总是返回正确的大小。 约束条件
的最大宽度或高度并不总是与您的组合对象的宽度或高度匹配。您可以使用Modifier.onSizeChanged()
在运行时查找组合内容的大小。
@Composable
fun Sample() {
Text(
"Hello",
Modifier.onSizeChanged {
println("Width of Text in dp: ${it.width.toDp}")
println("Height of Text in dp: ${it.height.toDp}")
}
)
}
val Int.toDp get() = (this / Resources.getSystem().displayMetrics.density).toInt()
with(localDensity){ coordinates.size.height.toDp() }
- Jeevan Rupacha