使用Android Studio Giraffe 2022.3.1 所以使用预设推荐的编译器与这个版本的android studio
查找关于
.align()
能够在列/行范围中使用的相互矛盾的在线信息。有人说它不起作用或只能在 BoxScope 内起作用。
然而,Android 开发人员介绍 CODELAB 使用此代码,并推荐在 columnScope 中使用
Modifier.align()
,这会引发相同的错误:
错误
无法访问“ColumnScopeInstance”:它位于“androidx.compose.foundation.layout”内部
未解决的参考:结束
import androidx.compose.foundation.layout.ColumnScopeInstance.align // import causing the first error
{ //Column Scope
Text(
text = message,
fontSize = 100.sp,
lineHeight = 116.sp,
textAlign = TextAlign.Center
)
Text(
text = from,
fontSize = 36.sp,
modifier = Modifier
.padding(16.dp)
.offset(90.dp)
.align(Alignment.End), // Error on this line
textAlign = TextAlign.Left
)
}
Align() 可用于 Row、Box 和 Column。认为align()仅适用于盒子类型是一种误解。
通用解决方案
我.
.align() 可在 3 种类型下以相同名称使用
1)水平---->在柱范围内使用
2)垂直---->在行范围内使用
3)正常(无多余说明)---->在Box Scope内使用
二.
在
androidx.compose.ui.Alignment
中使用正确的对齐方式 align()
参数,确保您使用的是这个:
align(androidx.compose.ui.Alignment)
问题
问题是代码完成智能感知的“超载”。
相同的关键字
"Alignment"
有时会用于 Layout.Alignment
,有时会用于 androidx.compose.ui.Alignment
。
Inteli-sense 擅长理解这一点并将其与正确的类型相匹配。但有时它不能很好地工作,所以我们会收到错误。 类似地,
align()
函数具有垂直、水平和正常上下文。
我的具体解决方案
.align(androidx.compose.ui.Alignment.End)
确保这是使用的对齐方式!
在我的 IDE 中,Alignment 关键字被 Layout.Alignment 占用了
所以不要盲目追随inteli-sense,刚开始学习android开发也是没有帮助的;)。
P.S:align() 只在盒子里起作用的神话可以追溯到这个。
只需删除导入行即可。如果您确实在 ColumnScope 中,它就会按照您的意愿工作。 为了确保您位于 ColumnScope 中,您可以检查您的可组合函数/lambda 是否是 ColumnScope 的扩展:
@Composable
fun ColumnScope.ComposableMethod() {
...
}
或
@Composable
fun ComposableMethodWithLambda(
content: @Composable ColumnScope.() -> Unit
) {
...
}
对齐只能在 Box() 组件内使用。
就像这样:
Box(modifier = Modifier.fillMaxSize()){
Text(
text = message,
fontSize = 100.sp,
lineHeight = 116.sp,
textAlign = TextAlign.Center
)
Text(
text = from,
fontSize = 36.sp,
modifier = Modifier
.padding(16.dp)
.offset(90.dp)
.align(Alignment.End), // Error on this line
textAlign = TextAlign.Left
)
}
您也可以查看此链接: