Ситуация такова: у меня есть макет ограничения с 3 TextViews подряд
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginBottom = "10dp"
android:id = "@+id/constraint"
tools:context = ".MainActivity">
<TextView
android:id = "@+id/small"
android:layout_width = "wrap_content"
android:layout_height = "20dp"
android:text = "5"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent" />
<TextView
android:id = "@+id/medium"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Some text, not too long"
android:layout_marginStart = "10dp"
app:layout_constraintStart_toEndOf = "@id/small"
app:layout_constraintTop_toTopOf = "parent" />
<TextView
android:id = "@+id/big"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Text, that can be extremely long, but can be also short"
android:layout_marginStart = "10dp"
app:layout_constraintStart_toEndOf = "@id/medium"
app:layout_constraintTop_toTopOf = "parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Последний textView может быть очень длинным, и когда это так, я хотел бы переместить этот textView под textView с идентификатором среды, чтобы текст в текстовом представлении не был разделен. Это означает, что я не хочу отображать текст в textView в двух строках, я хочу, чтобы текст отображался в одной строке. Если текст короткий: на том же уровне, что и другие textViews (рисунок 1), если текст слишком велик и не помещается на экране, весь textView должен отображаться под вторым textView(@+id/medium) - рисунок 2.
вообще можно так сделать? Если да, я был бы признателен, если вы дадите мне несколько советов. С тем, что я пытался сделать, я могу только переместить остальную часть текста в новую строку и отобразить textView в две строки, но это не то, что я действительно хочу видеть.
Стандартная ситуация, когда текст не слишком большой:
Что я хотел бы иметь, если текст слишком большой:
Вы можете использовать Flow
(нет, не тот), который является помощником макета в стиле flexbox для ConstraintLayout
.
<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:id = "@+id/constraint"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginBottom = "10dp"
tools:context = ".MainActivity"
tools:ignore = "MissingConstraints">
<androidx.constraintlayout.helper.widget.Flow
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
app:constraint_referenced_ids = "small, medium, big"
app:flow_horizontalBias = "0"
app:flow_horizontalGap = "10dp"
app:flow_horizontalStyle = "packed"
app:flow_wrapMode = "chain"
app:layout_constraintTop_toTopOf = "parent" />
<TextView
android:id = "@+id/small"
android:layout_width = "wrap_content"
android:layout_height = "20dp"
android:text = "5" />
<TextView
android:id = "@+id/medium"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Some text, not too long" />
<TextView
android:id = "@+id/big"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "Text, that can be extremely long, but can be also short" />
</androidx.constraintlayout.widget.ConstraintLayout>
По сути, он просто позволяет вам определить цепочку элементов и обрабатывать их ограничения (обратите внимание на tools:ignore = "MissingConstraints"
в основном макете, вы не размещаете их на самих представлениях), а затем вы можете настроить его на перенос, когда что-то выходит за пределы экрана и т. д. , Есть множество настроек, которые вы можете сделать, например, установить максимальное количество элементов в строке, сформировать выровненную сетку и т. д.
Здесь есть неплохой визуальный гайд: https://proandroiddev.com/awesomeness-of-constraintlayout-flow-aa0b5edd5df
Большое спасибо! Кажется, у меня это хорошо работает, оно действительно переводит весь текстовый вид на следующую строку. Я собираюсь еще немного поиграть с кодом, чтобы познакомиться с Flow, но это, очевидно, то, что я хотел. И ссылка очень полезная!
@DavidKroukamp, к сожалению, нет. Решение здесь разбивает текст на две строки, и именно этого я пытаюсь избежать. Мне нужно, чтобы весь textView (последний) отображался под вторым textView (и только в ситуации с длинным текстом)