代码之家  ›  专栏  ›  技术社区  ›  Cruces

如何使约束布局抵抗扩展以覆盖其他视图

  •  0
  • Cruces  · 技术社区  · 7 年前

    我有一个约束布局,其中有一个页眉视图和一个页脚视图

    它们之间有一个 EditText RecyclerView 和A Button 被锁在一起的。

    布局如下:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.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"
        android:paddingBottom="@dimen/app_padding">
    
    
        <TextView
            android:id="@+id/header"
            style="@style/app_text.large"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="@dimen/app_padding"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Hello Header" />
    
        <EditText
            android:id="@+id/filter"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@+id/list"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/header"
            app:layout_constraintVertical_chainStyle="packed" />
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/list"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@+id/add"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/filter" />
    
        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@+id/footer"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/list" />
    
    
        <TextView
            android:id="@+id/footer"
            style="@style/app_text.large"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="@dimen/app_padding"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            tools:text="Hello footer" />
    </android.support.constraint.ConstraintLayout>
    

    这看起来是我想要的,一个有多个项目的列表,总是以屏幕为中心。

    问题是,当列表中填充了太多的项时,它会开始向上展开并覆盖页眉。

    设置列表的 layout_height 0dp 解决了问题,但是列表总是占据屏幕的大部分(即使项目太少),并且 纽扣 总是粘在页脚上方 编辑文本 总是卡在收割台下面。

    有没有办法使 回收服务 wrap_content 因为它的布局高度,但在某种程度上受到限制,永远不会变得这么大,以涵盖头部?

    我更喜欢不需要设置最大高度的解决方案,因为这应该在多个屏幕维度上运行

    1 回复  |  直到 7 年前
        1
  •  1
  •   Pawel Laskowski    7 年前

    你需要的是 app:layout_constrainedHeight="true" 属性集 RecyclerView . 这允许使用 wrap_content view 的高度,但仍继续执行限制条件以限制生成的高度。

    推荐文章