我是 Jetpack Compose 新手。
假设我有一个根布局框,我想在框中放置多个文本/按钮/图像视图。 我知道当我直接在 BOX 范围内写入 Text() 时可以使用align(Alignment.BottomCenter)。
但是,当我尝试将一些代码分离到其自己的撰写函数中时,例如
@Composable
fun ActionButton(label: String,
modifier: Modifier = Modifier,
action: ()->Unit) {
Button(onClick = action, modifier = modifier.padding(36.dp).align(Alignment.BottomCenter)) {
Text(text = label)
}
}
这会给我错误:无法访问“BoxScopeInstance”:它是“androidx.compose.foundation.layout”的内部
即使这个 ActionButton 可组合项也只会在我的 BOX 布局中使用。
我的问题是有没有一种方法可以指定仅在 BOX 布局中使用的撰写函数中的对齐方式?
非常感谢。
导致此错误的原因是
align()
功能基本上依赖于父级,例如 Box
、Column
或 Row
。这就是为什么编译器必须确保您仅将这个 composable
函数用于指定的 Scope。并且您没有使用可组合项的任何范围。
因此,您可以指定该可组合项的范围,就像在您的情况下一样,只需通过导入正确的范围来更改声明,使该函数作为
BoxScope
的扩展函数:
导入 androidx.compose.foundation.layout.BoxScope
ActionButtonBoxScope.ActionButtton
然后你的可组合项应该如下所示:
@Composable
fun BoxScope.ActionButton(label: String,
modifier: Modifier = Modifier,
action: ()->Unit) {
Button(onClick = action, modifier = modifier.padding(36.dp).align(Alignment.BottomCenter)) {
Text(text = label)
}
}