Горизонтальный 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
(со значением обертки).