ConstraintLayout中constraintHeight_percent在视图叠放时失效问题咨询
解决ConstraintLayout 1.1.0 beta6中constraintHeight_percent失效的问题
刚看到你的问题,我之前在ConstraintLayout 1.x的beta版本里也踩过类似的百分比高度的坑,结合你的需求给你梳理下问题原因和可行的解决方案:
你的需求回顾
- 底部按钮(
bottom-button):固定高度,紧贴ConstraintLayout底部 - 顶部按钮(
top-button):位于父布局顶部与bottom-button之间,高度占该可用空间的一半
问题原因
在ConstraintLayout 1.1.0 beta版本中,constraintHeight_percent并不是单独生效的,它需要满足几个前提条件:
- 控件高度必须设置为
0dp(即match_constraint),让布局系统基于约束来计算高度 - 必须明确设置上下方向的约束,让布局系统能确定该控件的可用空间范围
- 需要配合
layout_constraintHeight_default="percent"来启用百分比高度模式
如果缺少任意一个条件,百分比高度就会失效,这也是beta版本和稳定版1.0.2在行为上的差异点之一。
完整的XML实现代码
<?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"> <!-- 顶部按钮:占可用空间的一半 --> <Button android:id="@+id/top-button" android:layout_width="match_parent" android:layout_height="0dp" android:text="Top Button" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@id/bottom-button" app:layout_constraintHeight_default="percent" app:layout_constraintHeight_percent="0.5"/> <!-- 底部按钮:固定高度 --> <Button android:id="@+id/bottom-button" android:layout_width="match_parent" android:layout_height="60dp" android:text="Bottom Button" app:layout_constraintBottom_toBottomOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
关键细节说明
- 给
top-button设置android:layout_height="0dp"是核心,这告诉布局系统我们要基于约束来计算高度 layout_constraintHeight_default="percent"明确启用百分比高度模式,让layout_constraintHeight_percent="0.5"生效- 上下约束
layout_constraintTop_toTopOf="parent"和layout_constraintBottom_toTopOf="@id/bottom-button"确定了top-button的可用空间范围,百分比就是基于这个范围来计算的
亲测在1.1.0 beta6版本中这个配置是可以正常工作的,你可以试试这个写法~
内容的提问来源于stack exchange,提问作者dor506
相关产品推荐
相关产品推荐

