如何在其他撰写功能中使用BOX范围的align(Alignment.BottomCenter)

问题描述 投票:0回答:1

我是 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 布局中使用的撰写函数中的对齐方式?

非常感谢。

android-jetpack-compose alignment jetpack compose
1个回答
0
投票

导致此错误的原因是

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)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.