如何使 ConstraintLayout 中的 View 填充可用高度?

Rob*_*b N 5 android android-constraintlayout

我是 Android 开发新手。我创建了一个具有两个视图的活动/布局。第一个是自定义按钮,我希望其高度为 50dp。第二个是列表视图,我想获取其下方屏幕的其余部分。

在此输入图像描述

我的问题是,当我将它们彼此约束时,它们ListView会被压缩为 0,并且 50dp 按钮周围的“弹簧”会膨胀以占据所有空间。在这里,我给列表的高度为 200dp,以便您可以看到它。如果我将其设置为“匹配约束”,它将变为 0。列表中有内容。

在此输入图像描述

由于 iOS 的限制,我知道如何做到这一点。按钮周围的约束的行为类似于 iOS 中的“大于或等于”约束。我希望他们“平等”。在 Android 中如何做到这一点?

这是 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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constrainedHeight="false"
    tools:context=".WorkoutActivity">

    <mycompany.PlayPauseButton
        android:id="@+id/play_pause_button"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toTopOf="@+id/workout_list"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/workout_list"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

小智 3

你必须将顶部连接listView到底部而playButton不是其他方式

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_constrainedHeight="false"
    tools:context=".WorkoutActivity">

    <mycompany.PlayPauseButton
        android:id="@+id/play_pause_button"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ListView
        android:id="@+id/workout_list"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_margin="8dp"
        app:layout_constraintTop_toBottomOf="@id/play_pause_button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

干杯:)