问题 具有多个子项的水平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 比屏幕宽,额外的部分离开屏幕/看不见。


13045
2017-08-24 00:15


起源

我不认为这在Android布局中是可行的。除非您实现了测量宽度和不测量宽度的侦听器,否则将视图向下移动。另一种选择是创建一个WebView并填充它,我知道它是可行的,但是我没有这方面的经验。祝你好运。 - LuckyMe


答案:


我希望有一个像水平一样宽的水平LinearLayout   屏幕和它的孩子一样高,但诀窍在于它的孩子   每个都有动态宽度,我不希望它们离开屏幕   (剪下)。

一个 LinearLayout 不能这样做(SDK中的任何默认布局都不能这样做)因为 LinearLayout 设置到位 所有 中的孩子们  水平或垂直线。此外,任何类型的条件布局规则基于尚未可用的维度(如在您的情况下可用的宽度) LinearLayout)无论如何都不可能在xml中。

你需要的是一个自定义布局,它测量孩子们使用可用空间移动下面一条新线上的任何不适合的孩子(所谓的 FlowLayout)。

编辑:

谷歌现在提供 flexbox 在Android上实现web的flexbox布局的库。使用该库,a。的孩子 FlexboxLayout 将使用它将基于宽度放在多行上 flexDirection(值为 )和 flexWrap(值为 )属性。


16
2017-08-24 06:58



破碎的视频链接 - Viper Alpha
@ViperAlpha是的,parleys网站已经不见了。我找了一个替代视频,但我找不到。该视频来自Chet Haase,其中一位Android SDK开发人员正在讨论创建自定义视图并在此过程中创建FlowLayout。如果需要,可以使用库来实现该布局 github.com/ApmeM/android-flowlayout - Luksprog
发现Google实施了自己的: github.com/google/flexbox-layout ,你可以将它添加到你的anwer中 - Viper Alpha
@ViperAlpha是的,这是要使用的库。我编辑了我的答案,将用户指向Google的图书馆。谢谢你的观察。 - Luksprog