我希望水平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
的孩子一旦比屏幕更宽,额外的部分就会离开屏幕/看不见。
答案 0 :(得分:16)
我希望有一个与...一样宽的水平LinearLayout 屏幕和它的孩子一样高,但诀窍是它的孩子 每个都有动态宽度,我不希望它们离开屏幕 (剪掉)。
LinearLayout
无法做到这一点(SDK中的任何默认布局都无法做到这一点),因为LinearLayout
设置为所有 strong>一个水平或垂直线。此外,任何类型的基于尚未提供的维度的条件布局规则(例如,LinearLayout
的可用宽度)都无法在xml中实现。
你需要的是一个自定义布局,它测量孩子们使用可用空间移动下面一个新线上的任何非适合孩子(所谓的FlowLayout
)。
编辑:
Google现在提供了flexbox
库,该库在Android上实现了web的flexbox布局。使用该库,FlexboxLayout
的子项将根据其宽度放置在多行上,方法是使用flexDirection
(值为行)和{{1} (值为 wrap )属性。
答案 1 :(得分:5)
除了Flexbox,您还可以使用ChipGroup,它是材料设计库的一部分
ChipGroup
也可以是其他组件的容器,它不必是Chip
,也可以是按钮等。
一个ChipGroup用于容纳多个芯片。默认情况下,芯片是 跨多行回流。将app:singleLine属性设置为 将芯片限制在一条水平线上。如果这样做,您将 通常希望将此ChipGroup包装在HorizontalScrollView中。
<com.google.android.material.chip.ChipGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:chipText="This" />
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:chipText="is" />
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:chipText="a" />
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:chipText="because" />
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:chipText="chip" />
<com.google.android.material.chip.Chip
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:chipText="group" />
</com.google.android.material.chip.ChipGroup>
已更新:
从Constraint Layout 2.0
开始,我们现在可以使用Flow
<androidx.constraintlayout.helper.widget.Flow
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:flow_wrapMode="chain"
app:constraint_referenced_ids="card1, card2, card3"
/>
通知app:constraint_referenced_ids
和app:flow_wrapMode
第一个关于传递视图,第二个关于处理包装视图的方式。
上阅读有关内容