Андроид. Как правильно расположить элементы в строке?
Я пытаюсь позиционировать элементы в своемRow
вот так: сначала текст, сразу за ним значок и второй значок, который нужно прибить к концу (правый край). Вот наглядный пример того, как это должно выглядеть:
И когда текст очень длинный, мне нужно:
Вот мой код:
Row(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
Row(modifier = Modifier.weight(1f)) {
Text(
text,
modifier = Modifier
.align(Alignment.Top)
)
Icon(
modifier = Modifier.padding(start = 12.dp),
painter = painterResource(R.drawable.ic_circle),
contentDescription = ""
)
}
Box(
modifier = Modifier
.size(26.dp)
.align(Alignment.CenterVertically),
) {
Image(
modifier = Modifier.align(Alignment.Center),
painter = painterResource(R.drawable.ic_square),
contentDescription = null,
)
}
}
Проблема в том, что текст может быть очень длинным, и в этом случае мой первый значок (круг) не отображается. Помогите, пожалуйста, как это исправить?
1 ответ
Вы можете использоватьModifier.weight(1f, fill = false)
наText
такImage
всегда измеряется по собственной ширине, в то время как текст продолжает расти. Строка и столбец сначала измеряют составные элементы без Modifier.weight, а затем делят пространство между компонентами с Modifier.weight.
Text(
text,
modifier = Modifier
.align(Alignment.Top)
.weight(1f, fill = false)
)
И это можно проверить вот так
@Preview
@Composable
private fun RowTest() {
var text by remember {
mutableStateOf("Text text")
}
Column {
SampleComposable(text = text)
TextField(value = text, onValueChange = { text = it })
}
}
@Composable
private fun SampleComposable(text: String) {
Row(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
) {
Row(modifier = Modifier.weight(1f)) {
Text(
text,
modifier = Modifier
.align(Alignment.Top)
.weight(1f, fill = false)
)
Icon(
modifier = Modifier.padding(start = 12.dp),
imageVector = Icons.Default.Circle,
contentDescription = ""
)
}
Box(
modifier = Modifier
.size(26.dp)
.align(Alignment.Top),
) {
Image(
modifier = Modifier.align(Alignment.Center),
imageVector = Icons.Default.Square,
contentDescription = null,
)
}
}
}