这可能吗?
我想要以下:
- 定义高度的 HEADER(例如 64dp)
- 4 行均匀分布的高度(视图高度的 25% 减去标题高度 <=这是有问题的细节)
我能以某种方式实现这一点ConstraintLayout
吗?
问题
我想添加一个固定高度的标题,并且我希望百分比约束不根据 s 高度计算它们的百分比,而是根据减去标题后ConstraintLayout
的剩余空间计算它们的百分比。ConstraintLayout
重要的提示
是的,我可以将整个包裹ConstraintLayout
在 aLinearLayout
中,但我对ConstraintLayout
唯一基于的解决方案感兴趣。
编辑 1
为了更清楚,我想要以下内容:
h_full... full height of ConstraintLayout
h_header... full height of header
Vertical arrangement of views should look like following:
- HEADER - y = 0
- VIEW 1 - y = h_header
- VIEW 2 - y = h_header + (h_full - h_header) / 4
- VIEW 3 - y = h_header + (h_full - h_header) / 4 * 2
- VIEW 4 - y = h_header + (h_full - h_header) / 4 * 3
Let's assume following:
h_full = 1000
h_header = 100
space for views = 1000 - 100 = 900 (this is the base for the percentages!)
h_view = 900 / 4 = 225
Then we get following:
- HEADER - y = 0
- VIEW 1 - y = 100
- VIEW 2 - y = 100 + 225
- VIEW 3 - y = 100 + 225 * 2
- VIEW 4 - y = 100 + 225 * 3
代码
<?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">
<!-- Guidelines -->
<!-- 3 horizontal guidelines -->
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_horizontal1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.25" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_horizontal2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_horizontal3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.75" />
<!-- Views - HEADER -->
<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" />
<!-- Views - 4 Views, evenly distrubuted vertically -->
<View
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/guideline_horizontal1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/guideline_horizontal2"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/guideline_horizontal1" />
<View
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/guideline_horizontal3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/guideline_horizontal2" />
<View
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/guideline_horizontal3" />
</androidx.constraintlayout.widget.ConstraintLayout>