如何在ConstraintLayout中居中Flow组件?
解决ConstraintLayout中容器水平垂直居中的问题
首先注意到你提供的布局里用的是LinearLayout而非Flow组件,不过核心需求是让这个承载两个TextView的容器在ConstraintLayout中实现水平+垂直居中,问题出在当前的约束不完整,且容器宽高设置不合理,以下是具体解决思路和修正后的代码:
关键修复点:
- 补全ConstraintLayout约束:要让View在ConstraintLayout中居中,需要同时设置水平和垂直方向的约束,仅设置
app:layout_constraintTop_toBottomOf只能固定顶部位置,无法实现垂直居中。 - 调整容器宽高:当前LinearLayout的
layout_width="match_parent"会让容器占满父布局宽度,水平居中失去意义,改为wrap_content让容器包裹内部按钮,再进行居中约束。 - 统一margin设置:将两个TextView的
layout_marginTop移到LinearLayout上,避免内部元素的margin打乱整体布局的居中计算。
修正后的LinearLayout布局代码:
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" android:layout_marginTop="@dimen/_50dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/et_password" app:layout_constraintBottom_toBottomOf="parent"> <TextView android:id="@+id/tv_submit" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_margin="20dp" android:background="@drawable/round_purple_corner" android:fontFamily="@font/inter_regular" android:gravity="center" android:padding="15dp" android:paddingHorizontal="@dimen/_10dp" android:text="Update" android:textColor="@color/white" android:textSize="16sp" /> <TextView android:id="@+id/tv_cancel" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_margin="20dp" android:background="@drawable/round_black_corner" android:fontFamily="@font/inter_regular" android:gravity="center" android:padding="15dp" android:paddingHorizontal="@dimen/_10dp" android:text="My Sales" android:textColor="@color/white" android:textSize="@dimen/_16sp" /> </LinearLayout>
如果你确实需要使用Flow组件(ConstraintLayout 2.0+):
直接替换LinearLayout为Flow,同样设置居中约束,Flow会自动排版内部元素,代码示例如下:
<androidx.constraintlayout.helper.widget.Flow android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_50dp" app:constraint_referenced_ids="tv_submit,tv_cancel" app:flow_horizontalGap="20dp" app:flow_verticalGap="20dp" app:flow_horizontalStyle="packed" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/et_password" app:layout_constraintBottom_toBottomOf="parent"> <TextView android:id="@+id/tv_submit" android:layout_width="150dp" android:layout_height="wrap_content" android:background="@drawable/round_purple_corner" android:fontFamily="@font/inter_regular" android:gravity="center" android:padding="15dp" android:paddingHorizontal="@dimen/_10dp" android:text="Update" android:textColor="@color/white" android:textSize="16sp" /> <TextView android:id="@+id/tv_cancel" android:layout_width="150dp" android:layout_height="wrap_content" android:background="@drawable/round_black_corner" android:fontFamily="@font/inter_regular" android:gravity="center" android:padding="15dp" android:paddingHorizontal="@dimen/_10dp" android:text="My Sales" android:textColor="@color/white" android:textSize="@dimen/_16sp" /> </androidx.constraintlayout.helper.widget.Flow>
内容的提问来源于stack exchange,提问作者Shubham Sahu
相关产品推荐
相关产品推荐

