对齐相对侧的两个视图(一个在顶部,一个在底部)并能够在顶视图增长时推动底部视图?

Align two views in opposites sides (one at the top and one at the bottom) and be able to push the bottom view when the top view grows?

我基本上有一个 EditText 在视图的顶部对齐,在视图的底部有一个 RecyclerView 也可以增长(最新的项目在底部) 使用约束布局很容易做到这一点,但我的问题是,当 EditText 增长时,它应该开始下推列表。但是该列表最初是在父级的底部对齐的。 (并且一切都应该是可滚动的) 我希望这张图片能让事情更清楚

这里的技巧是避免形成垂直链(以便顶部的 EditText 始终保持在原位)并利用 RecyclerView 上的 app:layout_constrainedHeight 属性,以便在EditText 增长。

<?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">

    <EditText
        android:id="@+id/text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/list"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constrainedHeight="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/text"
        app:layout_constraintVertical_bias="1"/>

</androidx.constraintlayout.widget.ConstraintLayout>

android:layout_height="wrap_content"app:layout_constrainedHeight="true" 的组合,以及顶部和底部约束,意味着 RecyclerView 将始终与其项目 或 [=22 一样高=] EditText 下方的可用 space,以较小者为准。

app:layout_constraintVertical_bias="1" 属性确保当列表没有填满屏幕时,它位于底部。

我想补充上一个答案,如果你想滚动你的布局,你可以像这样使用:

<androidx.core.widget.NestedScrollView 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"
android:fillViewport="true">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/edit_text"
        app:layout_constraintVertical_bias="1.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

这将使所有内容按您想要的方式对齐,您可以向下滚动以查看完整内容 recyclerViewNestedScrollView 将确保一切顺利进行。