Android ConstraintLayout – настройка ширины ChildsAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android ConstraintLayout – настройка ширины Childs

Сообщение Anonymous »

Мне нужна композиция, которая динамически регулирует ширину дочернего представления в зависимости от доступного пространства.
Правила:
  • Правый и левый разделители всегда видимы.
  • Размер разделителей: минимум 6 dp, максимум 16 dp.
  • Размер разделителей можно регулировать в зависимости от размера текста.
    Текст представляет собой одну строку и может располагаться по эллипсу, если не зафиксировать его между разделителями.
Это разные варианты поведения, которые мне нужны. из композиции.
Изображение

У меня есть следующий код , но разделители не имеют одинакового размера, когда текст выходит за пределы своего пространства:

Код: Выделить всё

@Preview
@Composable
fun MyComponent() {
val minLineWidth = 3.dp
val maxLineWidth = 16.dp

val idLeft = "line_left"
val idRight = "line_right"
val idText = "text"

val constraint = ConstraintSet {
val startLineRef = createRefFor(idLeft)
val endLineRef = createRefFor(idRight)
val textRef = createRefFor(idText)

constrain(startLineRef) {
start.linkTo(parent.start)
end.linkTo(textRef.start)
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
width = Dimension.preferredWrapContent.atLeast(minLineWidth).atMost(maxLineWidth)
}

constrain(endLineRef) {
end.linkTo(parent.end)
start.linkTo(textRef.end)
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
width = Dimension.preferredWrapContent.atLeast(minLineWidth).atMost(maxLineWidth)
}

constrain(textRef) {
start.linkTo(startLineRef.end)
end.linkTo(endLineRef.start)
width = Dimension.preferredWrapContent.atMostWrapContent
}

}
ConstraintLayout(
modifier = Modifier.requiredWidth(80.dp),
constraintSet = constraint,
) {
Divider(
modifier = Modifier
.layoutId(idLeft),
color = Color.Red
)

Divider(
modifier = Modifier
.layoutId(idRight),
color = Color.Blue
)

Text(
modifier = Modifier
.layoutId(idText),
text = "ABCDEFG",
textAlign = TextAlign.Center,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
Результат:
Изображение

Предлагаете, чтобы разделитель всегда имел одинаковый размер при уменьшении из-за размера текста?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -of-childs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»