ConstrainLayout中的ScrollView滚动错误

时间:2019-05-08 11:10:15

标签: android android-constraintlayout android-scrollview

我有这样的布局:

  <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"
    tools:context=".MainActivity">

    <android.support.constraint.Guideline
        android:id="@+id/bottomGuideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.95"/>


    <ImageView
        android:id="@+id/logo"
        android:layout_width="144dp"
        android:layout_height="52dp"
        android:layout_marginTop="16dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toTopOf="@id/tvTitle"
        app:layout_constraintVertical_chainStyle="packed"
        android:src="@drawable/ic_launcher_background"/>

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_marginTop="28dp"
        app:layout_constraintTop_toBottomOf="@+id/logo"
        app:layout_constraintStart_toStartOf="@id/btnGooglePlay"
        app:layout_constraintEnd_toEndOf="@id/btnGooglePlay"
        app:layout_constraintBottom_toTopOf="@id/tvText"
        app:layout_constraintVertical_chainStyle="packed"
        android:text="Title!"
        />

    <TextView
        android:id="@+id/tvText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="28dp"
        android:gravity="center"
        app:layout_constraintTop_toBottomOf="@id/tvTitle"
        app:layout_constraintStart_toStartOf="@id/btnGooglePlay"
        app:layout_constraintEnd_toEndOf="@id/btnGooglePlay"
        app:layout_constraintBottom_toTopOf="@id/scroll"
        app:layout_constraintVertical_chainStyle="packed"
        android:text="Many test about something.\nMany test about something Many test about something Many test about something"
        />

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@id/tvText"
        app:layout_constraintStart_toStartOf="@id/btnGooglePlay"
        app:layout_constraintEnd_toEndOf="@id/btnGooglePlay"
        app:layout_constraintBottom_toTopOf="@id/btnGooglePlay"
        app:layout_constraintVertical_chainStyle="packed"
        >

        <LinearLayout
            android:id="@+id/containerFeature"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="vertical"/>

    </ScrollView>

    <android.support.v7.widget.CardView
        android:id="@+id/btnGooglePlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="28dp"
        android:layout_marginStart="32dp"
        android:layout_marginEnd="32dp"
        app:layout_constraintBottom_toTopOf="@id/bottomGuideline"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:background="@color/colorPrimary"
        app:cardElevation="4dp"
        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="12dp"
            android:paddingBottom="12dp"
            android:background="@color/colorPrimary"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="Push this"
                android:textAllCaps="true"
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:layout_gravity="center"
                android:text="some description"
                />

        </LinearLayout>



    </android.support.v7.widget.CardView>



</android.support.constraint.ConstraintLayout>

如果containerFeature中的项目不多,我希望图标(R.id.logo)靠近中心。喜欢这张照片:

this

如果还有更多项目,则图标必须靠近顶部:

this

但是如果有很多项目,我希望ScrollView可以工作。

我会看到的:

this

如果我将ScrollView属性layout_height更改为“ 0dp”,我会看到一切正常,但是图标始终显示为“ chainStyle="packed"”。

我该如何解决ScrollView的{​​{1}}行为?

1 个答案:

答案 0 :(得分:1)

默认情况下,如果将Auth\ResetPasswordController.php的尺寸设置为protected function guard() { return Auth::guard('owner'); } public function broker() { return Password::broker('admin'); } ,则当其尺寸太大而不能满足要求时,将不执行其约束。为了更改该行为并强制执行,您需要在View中添加wrap_content

文档:

  

WRAP_CONTENT:强制执行约束(在1.1中添加)

     

如果将尺寸设置为WRAP_CONTENT,则在1.1之前的版本中,它们将被视为文字尺寸-意味着,约束将不会限制生成的尺寸。通常,这足够了(并且更快),但在某些情况下,您可能想使用WRAP_CONTENT,但仍要强制执行约束以限制结果尺寸。在这种情况下,您可以添加相应的属性之一:

     

app:layout_constrainedWidth =” true | false”

     

app:layout_constrainedHeight =” true | false”