Modifer.align() 不适用于文本。未解决的范围实例错误

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

使用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
            )
        }
android kotlin android-jetpack-compose android-jetpack
3个回答
1
投票

只需删除导入行即可。如果您确实在 ColumnScope 中,它就会按照您的意愿工作。 为了确保您位于 ColumnScope 中,您可以检查您的可组合函数/lambda 是否是 ColumnScope 的扩展:

@Composable
fun ColumnScope.ComposableMethod() {
    ...
} 

@Composable
fun ComposableMethodWithLambda(
    content: @Composable ColumnScope.() -> Unit
) {
    ...
}

1
投票

问题

问题是代码完成智能感知的“超载”。

相同的关键字

"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() 只在盒子里起作用的神话可以追溯到这个。


-1
投票

对齐只能在 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
        )
   }

您也可以查看此链接:

Android Jetpack Compose 尝试对齐框中的文本

© www.soinside.com 2019 - 2024. All rights reserved.