【问题标题】:ConstraintLayout Flow helper exampleConstraintLayout Flow 帮助程序示例
【发布时间】:2019-02-25 20:18:34
【问题描述】:

我在blog entry 中读到,在ConstraintLayout 2.0.0 中,引入了一种创建视图流的方法。我到底想达到什么: 我有几个TextViews,大小固定。根据屏幕大小,一些TextViews 应该被推到下一行。

6个TextViews的大屏幕示例:

[AAA] [BBB] [CCC] [DDD]

[EEE] [FFF]

6 个TextViews 的小屏幕示例:

[AAA] [BBB]

[CCC] [DDD]

[EEE] [FFF]

我已经看到this Stackoverflow 问题提出使用FlexboxLayout,但是有评论说现在可以使用ConstraintLayout 来实现同样的事情。

谁能给我一个例子,说明如何使用ConstraintLayout 实现所需的行为?我找不到有关此的任何说明。提前致谢。

【问题讨论】:

  • 我看到开发人员在这个 video 中提到了这个流程,大约在 26:18 左右,但我看不到它实际发布的位置。

标签: android xml layout android-constraintlayout


【解决方案1】:

您可以通过在androidx.constraintlayout.widget.ConstraintLayout 中添加androidx.constraintlayout.helper.widget.Flow 虚拟视图并使用app:constraint_referenced_ids 属性引用所有文本视图来实现此目的。

下面的示例显示了我是如何实现它的。

<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="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="[AAAAAAAA]"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="[BBBBBBBB]"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/text3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="[CCCCCCCC]"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/text4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="[DDDDDDDD]"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/text5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="[EEEEEEEE]"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/text6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="[FFFFFFFF]"
        tools:ignore="MissingConstraints" />

    <androidx.constraintlayout.helper.widget.Flow
        android:id="@+id/flow1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="10dp"
        app:constraint_referenced_ids="text1,text2,text3,text4,text5,text6"
        app:flow_horizontalBias="0"
        app:flow_horizontalGap="10dp"
        app:flow_horizontalStyle="packed"
        app:flow_verticalBias="0"
        app:flow_wrapMode="chain"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

使用app:flow_ 属性来改变文本视图的排列,例如对齐、边距等。 https://developer.android.com/reference/androidx/constraintlayout/helper/widget/Flow

根据您的屏幕尺寸,最终结果应如下所示。

【讨论】:

  • 我认为在这种情况下,wrapMode 的 wrap_aligned 很好,因为它会将其变成列developer.android.com/reference/android/support/constraint/…
  • @Yasitha Waduge 如果我们想为这个流程添加背景?有可能吗?
  • @aeroxr1 是的,您可以为约束布局添加背景。 (虽然流程是一个虚拟布局,我认为给流程添加背景不会有任何效果)
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多