在ConstraintLayout中使用minHeight查看

时间:2017-10-09 20:31:52

标签: android android-constraintlayout

ConstraintLayout内有NestedScrollViewConstraintLayout包含一堆视图,但最后View可以有动态高度来填充底部空间iff有任何但如果没有足够的空间它也需要是最小高度。

为了论证,这是一个例子。

<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <android.support.constraint.ConstraintLayout       
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:layout_height="match_parent">

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintHeight_min="1500dp"
            android:background="@color/red"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"  
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    </android.support.constraint.ConstraintLayout>


</android.support.v4.widget.NestedScrollView>

正如您所看到的,我已将ConstraintLayout版本放入,但它不起作用。显然,这些值非常大,但这只是用于测试。

如果我未在fillViewport="true"上设置NestedScrollView,则ConstraintLayout的高度为0.当我设置fillViewport时,ConstraintLayout不滚动但只是填满屏幕。

如何设置视图以使其扩展到ConstraintLayout的底部,它应该与视口一样大,但如果我的视图不是minHeight那么我们允许滚动?< / p>

我正在使用1.0.2库的版本ConstraintLayout

我期望看到的是一直到父母的底部但是如果该大小小于1500dp则视图滚动。

我输入1500dp就像android:layout_height="1500dp"一样,视图会相应滚动。

更新1

似乎是我将布局放在FragmentViewPager内。 app:layout_constraintHeight_min属性不受尊重,只匹配视口的高度。

我还尝试从片段中取出NestedScrollView并将ViewPager放入其中,但再次无效。

3 个答案:

答案 0 :(得分:17)

将此属性添加到您想要拉伸的视图中:

b

我做了一个小应用程序来演示。没有Java逻辑可言,但这里是布局:

app:layout_constraintHeight_default="spread"

底视图伸展以在视口小于剩余可用空间时填充视口,并且无法滚动:

enter image description here

当底部视图大于剩余的可用空间时,底部视图保持固定的高度,这使滚动成为可能:

enter image description here enter image description here

答案 1 :(得分:0)

我正在使用com.android.support.constraint:constraint-layout:1.0.2这对我有用:

<android.support.v4.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:orientation="vertical">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <View
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="@drawable/gradient"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHeight_min="1500dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </android.support.constraint.ConstraintLayout>

</android.support.v4.widget.NestedScrollView>

答案 2 :(得分:0)

首先,我们必须为每个文本视图指定固定高度或使用换行内容作为另一个选项。辅助内部约束布局属性 app:layout_constraintHeight_default =“spread”帮助最后查看以获得剩余的完整空间,如果没有剩余空间,则自动同步滚动视图。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.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">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#caf"
        android:padding="16dp">

        <TextView
            android:id="@+id/one"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:background="#fff"
            android:gravity="center"
            android:text="hello world"
            app:layout_constraintBottom_toTopOf="@+id/two"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/two"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:background="#eee"
            android:gravity="center"
            android:text="hello world"
            app:layout_constraintBottom_toTopOf="@+id/three"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/one" />

        <TextView
            android:id="@+id/three"
            android:layout_width="0dp"
            android:layout_height="48dp"
            android:background="#eee"
            android:gravity="center"
            android:text="hello world"
            app:layout_constraintBottom_toTopOf="@+id/four"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/two" />

        <TextView
            android:id="@+id/four"
            android:layout_width="0dp"
            anroid:layout_height="48dp"
            android:background="#eee"
            android:gravity="center"
            android:text="hello world"
            app:layout_constraintBottom_toTopOf="@+id/five"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/three" />

        <TextView
            android:id="@+id/five"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="#ddd"
            android:gravity="center"
            android:text="hello world"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHeight_default="spread"
            app:layout_constraintHeight_min="300dp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/three" />

    </android.support.constraint.ConstraintLayout>

</android.support.v4.widget.NestedScrollView>