ConstraintLayout 中Flow 使用方式以及坑

1,611 阅读1分钟

Flow

<androidx.constraintlayout.helper.widget.Flow
    android:id="@+id/flow"
    //宽度要指定,否则会顶出屏幕外面
    android:layout_width="0dp" 
    android:layout_height="wrap_content"
    android:layout_marginStart="10dp"
    android:layout_marginEnd="10dp"
    //引用的id(内部的view的id)
    app:constraint_referenced_ids="tv_type,tv_online_state,tv_switch_state"
    //chain或者aligned,chain:链形式,依次挨着排,aligned会两端对齐
    app:flow_wrapMode="chain" 
    //首行的对齐方式,packed:靠最左侧挨着排,水平间隔:horizontalGap生效, 
    // spread:分散对齐,两端不贴边。spread_inside:分散对齐,两头贴边
    app:flow_firstHorizontalStyle="packed"
    //最后一行的对齐方式,其他属性参考firstHorizontalStyle
    app:flow_lastHorizontalStyle="packed"
    // 全局水平bias,为0时,每行都贴左边,可解决中间行单独占一行时,不贴最左侧的问题
    app:flow_horizontalBias="0"
    // 第一行水平bias,为0时,贴最左边
    app:flow_firstHorizontalBias="0"
    // 最后一行水平bias,为0时,贴最左边
    app:flow_lastHorizontalBias="0"
    // 控件水平方向上的间隔
    app:flow_horizontalGap="10dp"
    // 行间隔
    app:flow_verticalGap="8dp"
    app:layout_constraintEnd_toStartOf="@id/ibt_go"
    app:layout_constraintStart_toEndOf="@id/guideline"
    app:layout_constraintTop_toTopOf="@id/tv_org_name" />

注意事项

如果Flow自身的高度不确定 则需要 设置如下代码 如果不设置则 不会自动换行处理

如果 需要约束的View 不写约束条件则最好也添加下边代码

android:layout_height="0dp"
app:layout_constraintHeight_default="wrap"