使用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
)
}
只需删除导入行即可。如果您确实在 ColumnScope 中,它就会按照您的意愿工作。 为了确保您位于 ColumnScope 中,您可以检查您的可组合函数/lambda 是否是 ColumnScope 的扩展:
@Composable
fun ColumnScope.ComposableMethod() {
...
}
或
@Composable
fun ComposableMethodWithLambda(
content: @Composable ColumnScope.() -> Unit
) {
...
}
问题
问题是代码完成智能感知的“超载”。
相同的关键字
"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() 只在盒子里起作用的神话可以追溯到这个。
对齐只能在 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
)
}
您也可以查看此链接: