如何给ConstraintLayout内Guideline加边距实现固定头部后剩余空间均分4行
实现方案
完全可以仅通过单个ConstraintLayout实现,无需嵌套其他布局。你原有代码的问题在于使用了基于ConstraintLayout整体高度计算的百分比引导线,不符合「扣除头部固定高度后再均分剩余空间」的要求,改用垂直加权链即可实现需求。
核心逻辑
- 保留固定高度的Header,约束在父布局顶部
- 将4个待均分的View的高度都设置为
0dp,第一个View的顶部约束在Header的底部,最后一个View的底部约束在父布局的底部,相邻View之间互相约束上下边,形成垂直链 - 给4个View统一设置
app:layout_constraintVertical_weight="1",系统会自动将Header之外的剩余垂直空间平均分配给4个View,完全符合你给出的高度计算规则
修正后完整代码
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 固定高度头部 --> <View android:id="@+id/header" android:layout_width="0dp" android:layout_height="64dp" android:layout_marginLeft="@dimen/calender_cell_padding" android:layout_marginTop="@dimen/calender_cell_padding" android:layout_marginRight="@dimen/calender_cell_padding" android:layout_marginBottom="@dimen/calender_cell_padding" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <!-- 4个等高度分布的视图 --> <View android:id="@+id/view1" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/header" app:layout_constraintBottom_toTopOf="@id/view2" app:layout_constraintVertical_weight="1" /> <View android:id="@+id/view2" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/view1" app:layout_constraintBottom_toTopOf="@id/view3" app:layout_constraintVertical_weight="1" /> <View android:id="@+id/view3" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/view2" app:layout_constraintBottom_toTopOf="@id/view4" app:layout_constraintVertical_weight="1" /> <View android:id="@+id/view4" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/view3" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_weight="1" /> </androidx.constraintlayout.widget.ConstraintLayout>
内容的提问来源于stack exchange,提问作者prom85
相关产品推荐
相关产品推荐

