我在Jetpack Compose中使用constrainAs来约束选项列表。
1.在文本的左边有一个空格,我相信这是由于我将文本框的开头限制在父级,结尾限制在开关的开头,但是我需要文本像第二个选项中所示的那样换行,所以我认为我需要这两个约束。我已经尝试了几个约束,但无法弄清楚如何使文本左对齐并进行换行。该问题在图像中以红色显示。
1.另外,我不知道如何在标题和描述之间保持相同的间距。这在图片中以蓝色显示。我将描述限制在标题的底部,但当它换行时,文本框变大并向上移动,因为文本居中,所以会产生不同的间距。
我附上了一张图片和代码.
@Composable
fun SwitchRow(title: String, description: String, enabled: Boolean) {
Box(modifier = Modifier
.height(66.dp)
.fillMaxWidth()
.padding(top = 12.dp, start = 16.dp, end = 8.dp, bottom = 12.dp)
) {
ConstraintLayout(
modifier = Modifier
.fillMaxWidth()
) {
val (titleText, descriptionText, switch) = createRefs()
Text(
text = title,
modifier = Modifier
.padding(bottom = 16.dp)
.constrainAs(titleText) {
start.linkTo(parent.start)
top.linkTo(parent.top)
},
color = MyAppTheme.colors.ice,
fontSize = 18.sp,
fontFamily = FontFamily(Font(R.font.barlow_regular, FontWeight.Normal)),
textAlign = TextAlign.Start
)
Text(
text = description,
modifier = Modifier
.wrapContentSize()
.constrainAs(descriptionText) {
start.linkTo(parent.start)
end.linkTo(switch.start)
top.linkTo(titleText.bottom)
bottom.linkTo(parent.bottom)
width = Dimension.fillToConstraints
},
color = MyAppTheme.colors.chalk,
fontSize = 14.sp,
fontFamily = FontFamily(Font(R.font.barlow_regular, FontWeight.Normal)),
maxLines = 2,
textAlign = TextAlign.Start
)
val checkedState = remember { mutableStateOf(true) }
Switch(modifier = Modifier
.background(color = Color.Gray)
.constrainAs(switch) {
top.linkTo(parent.top)
end.linkTo(parent.end)
},
enabled = enabled,
checked = checkedState.value,
onCheckedChange = { checkedState.value = it },
colors = SwitchDefaults.colors(
checkedThumbColor = MyAppTheme.colors.envy,
checkedTrackColor = MyAppTheme.colors.darkerEnvy,
uncheckedThumbColor = MyAppTheme.colors.navy,
uncheckedTrackColor = MyAppTheme.colors.darkerNavy,
),
)
}
}
}
2条答案
按热度按时间li9yvcax1#
第一节第一节第一节第一节第一次
我复制并粘贴到我的编辑器的代码,它给了我很多错误,我无法解决。所以我不能让你的副本和过去的答案...对不起。
但是!仔细看!
您需要考虑的唯一内容是Row()和Columns()
把这种心态插入到你的思维方式中,它会让你的生活变得轻松。如果你熟悉Web开发,就像CSS一样(因为我看到你写了证明内容)。
请看下面这张照片。
正如您在上图中所看到的,行有两个主要属性,即按照您所说的那样调整内容。并且您可以使用
ctrl + space
列出所有属性第一个是
horizontalArrangement =
,第二个是verticalAlignment =
,如下面的代码所示。这是非常令人困惑的,因为一个列也有非常相似的属性来证明它的内容!
第一个是
verticalArrangement =
,第二个是horizontalAlignment =
,它们是不同的词,所以在处理这个设计时要集中注意力,这样你就不会混淆你自己了!我在每一行和每一列都包含了边界的属性,这样你就可以看到我的思维方式。
专业提示!使用一个懒惰的列以便窗口大小可以是动态的给你的使用.
在你玩这个之后,你会更容易制作。
改性剂的X1 M5 N1 X性质解决了这个问题。
我给了左列85%和切换按钮15%的百分比,你会看到在代码中修改它,如果你需要这样做。
我为您创建了一个最简单的例子,我可以使适合您的需要,您可以为您修改,如果您遇到任何更多的问题,随时评论和询问。
最终结果^
这个播放列表包含了很多信息。观看它可以获得更多关于你的设计和如何实现它们的想法。
https://www.youtube.com/watch?v=cDabx3SjuOY&list=PLQkwcJG4YTCSpJ2NLhDTHhi6XBNfk9WiC&ab_channel=PhilippLackner
xwbd5t1u2#
我认为下面的代码变化将解决你的问题,我不使用字体风格和颜色一样,你的。
要左对齐/开始对齐,必须删除.wrapContentSize()方法。
但我认为你必须改变你的函数约束结构如下代码
在这两个代码中,你必须根据自己的需要改变填充和间距。