在ConstraintLayout中如何在屏幕底部按钮上方添加水平分割线
问题原因
代码里存在多个约束逻辑错误导致分割线位置异常,同时列表排版也存在布局溢出隐患:
- 分割线的
app:layout_constraintBottom_toBottomOf="@id/button"会让分割线底部和按钮底部对齐,自然不会显示在按钮上方,应该改为约束分割线底部到按钮的顶部 - 给分割线添加的
layout_constraintVertical_bias属性属于不必要参数,会打乱垂直位置计算 RecyclerView高度设为wrap_content且没有底部约束,当列表内容过多时会挤占底部按钮区域,需要给列表加底部约束到分割线上方,同时高度设为0dp(match_constraint)让列表自适应中间剩余空间- 按钮的
android:layout_alignParentBottom="true"是RelativeLayout的属性,在ConstraintLayout中无效可以直接删除
修改后的完整代码
<?xml version="1.0" encoding="utf-8"?> <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"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" android:text="Some text here" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler" app:layout_constraintTop_toBottomOf="@id/text" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@id/divider" android:layout_marginTop="12dp" android:layout_width="match_parent" android:layout_height="0dp"/> <View android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="2dp" android:layout_marginStart="16dp" android:background="@color/red_color" app:layout_constraintBottom_toTopOf="@id/button" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:text="Click Here" /> </ConstraintLayout>
效果说明
修改后视图层级的约束逻辑从上到下依次衔接:顶部TextView → 中间RecyclerView撑满剩余空间 → 分割线固定在按钮正上方 → 按钮贴在屏幕底部,不会出现列表内容过多挤压底部控件的问题,分割线也会稳定显示在按钮和列表之间的位置。
内容的提问来源于stack exchange,提问作者Jim
相关产品推荐
相关产品推荐

