Горизонтальный LinearLayout с несколькими детьми, перемещение детей ниже на новой линии, когда больше нет горизонтального пространства

Я хотел бы иметь горизонтальный LinearLayout, такой же широкий, как экран и выше его детей, но трюк в том, что его дети будут иметь динамическая ширина каждого, и я не хочу, чтобы они уходили с экрана (вырезали). Я хочу, чтобы они перетекали/ломались в новой строке, чтобы они были видны.

Хотя он абсолютно не имеет отношения к Android, он должен работать так же, как встраиваемый <div> работать в HTML.

Вот что я имею прямо сейчас:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="If you would enter some digits in this field " />
        <EditText
            android:id="@+id/tvDistance"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="enter some digits here"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=" that would be great" />
    </LinearLayout>

Но как только дети LinearLayout становятся шире экрана, дополнительная часть выходит из экрана/невидимая.

Ответ 1

Я хотел бы иметь горизонтальный LinearLayout, который так же широк, как и экран и так же высоко, как и его дети, но трюк в том, что его дети будут иметь динамическую ширину каждый, и я не хочу, чтобы они уходили с экрана (вырезать).

A LinearLayout не может этого сделать (любой макет по умолчанию из SDK не может этого сделать), поскольку для параметра LinearLayout установлено все дети в один горизонтальная или вертикальная линия. Кроме того, любой тип условных правил компоновки, основанный на уже недоступных размерах (например, в вашем случае доступная ширина для LinearLayout), в любом случае не может быть xml.

Что вам нужно - это настраиваемый макет, который позволяет детям использовать доступное пространство для перемещения любых не улокальных детей на новую строку ниже (так называемый FlowLayout).

Edit:

Теперь Google предоставляет библиотеку flexbox, которая реализует макет веб-макета flexbox на Android. Используя эту библиотеку, дочерние элементы FlexboxLayout будут помещаться в несколько строк на основе их ширины, используя атрибуты flexDirection (со значением строки) и flexWrap (со значением обертки).