简体   繁体   English

ConstraintLayout中的ScrollView不会完全滚动到底部

[英]ScrollView inside ConstraintLayout not scrolling entirely to the bottom

I had to introduce a ScrollView in my Dialog layout to display all the layout when the phone is in landscape mode or the app is running on small screens. 当手机处于横向模式或应用程序在小屏幕上运行时,我必须在“ Dialog布局中引入ScrollView才能显示所有布局。 However, the bottom of the layout is being cut off. 但是,布局的底部已被切除。

I've tried different things like setting ScrollView 's layout_height = "0dp" , adding more constraints, replacing the ScrollView with a NestedScrollView and other small things as clipToPadding = false or fillViewPort = true but none of these have worked. 我尝试了其他操作,例如设置ScrollViewlayout_height = "0dp" ,添加更多约束,用NestedScrollView替换ScrollView以及其他一些小事情,例如clipToPadding = falsefillViewPort = true但这些都fillViewPort = true

This is my layout currently used in a Dialog I need: 这是我目前在Dialog需要的布局:

<?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"> <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/icon_image_container" android:layout_width="match_parent" android:layout_height="80dp" android:background="@color/colorPrimary" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <ImageView android:id="@+id/icon_image" android:layout_width="50dp" android:layout_height="50dp" android:background="@drawable/ic_help_outline_white_24dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:ignore="ContentDescription" /> </androidx.constraintlayout.widget.ConstraintLayout> <ScrollView android:id="@+id/message_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="none" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/icon_image_container"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp"> <TextView android:id="@+id/help_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAlignment="center" android:textAppearance="@style/TextAppearance.AppCompat.Headline" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/help_message" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/internal_margin_views" android:textAlignment="textStart" android:textAppearance="@style/TextAppearance.AppCompat.Medium" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/help_title" /> <TextView android:id="@+id/help_example_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/internal_margin_views" android:text="@string/help_dialog_example_title" android:textAlignment="center" android:textAppearance="@style/TextAppearance.AppCompat.Headline" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/help_message" /> <TextView android:id="@+id/help_example_message" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/internal_margin_views" android:textAlignment="textStart" android:textAppearance="@style/TextAppearance.AppCompat.Medium" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/help_example_title" /> <Button android:id="@+id/help_button_ok" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_marginTop="@dimen/internal_margin_views" android:background="@drawable/button_background" android:text="@string/help_dialog_button_ok" android:textAlignment="center" android:textColor="@color/colorPrimary" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/help_example_message" /> </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> </androidx.constraintlayout.widget.ConstraintLayout>

And this is how it's being displayed with the above xml layout. 这就是上面的xml布局的显示方式。 The image is showing the scrollview scrolled to the bottom as far as possible. 该图像显示了滚动视图尽可能滚动到底部。

当前布局

I have been stuck on this a lot. 我被这个问题困扰了很多。 Any help would be much appreciated 任何帮助将非常感激

Change scrollview height to 0dp and constraint it to the bottom of parent it should solve your issue 将scrollview的高度更改为0dp并将其约束到父级的底部,这应该可以解决您的问题

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

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/icon_image_container"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:background="@color/colorPrimary"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <ImageView
        android:id="@+id/icon_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/ic_help_outline_white_24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:ignore="ContentDescription" />

</androidx.constraintlayout.widget.ConstraintLayout>

<ScrollView
    android:id="@+id/message_container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:scrollbars="none"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@id/icon_image_container">

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

        <TextView
            android:id="@+id/help_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/help_message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/internal_margin_views"
            android:textAlignment="textStart"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/help_title" />

        <TextView
            android:id="@+id/help_example_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/internal_margin_views"
            android:text="@string/help_dialog_example_title"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Headline"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/help_message" />

        <TextView
            android:id="@+id/help_example_message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/internal_margin_views"
            android:textAlignment="textStart"
            android:textAppearance="@style/TextAppearance.AppCompat.Medium"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/help_example_title" />

        <Button
            android:id="@+id/help_button_ok"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/internal_margin_views"
            android:background="@drawable/button_background"
            android:text="@string/help_dialog_button_ok"
            android:textAlignment="center"
            android:textColor="@color/colorPrimary"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/help_example_message" />

        </androidx.constraintlayout.widget.ConstraintLayout>

    </ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

I post the answer in case anybody encounter the same issue. 如果有人遇到相同问题,我会发布答案。 I just replaced the root layout from ConstraintLayout to LinearLayout with orientation = "vertical" and the same thing for the layout inside the ScrollView . 我只是将根目录布局从ConstraintLayout替换为LinearLayoutorientation = "vertical" ,而ScrollView内部的布局也是如此。

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

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/icon_image_container"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@color/colorPrimary"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@+id/icon_image"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="@drawable/ic_help_outline_white_24dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:ignore="ContentDescription" />

    </androidx.constraintlayout.widget.ConstraintLayout>

    <ScrollView
        android:id="@+id/message_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbars="none"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/icon_image_container">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp">

            <TextView
                android:id="@+id/help_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textAlignment="center"
                android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

            <TextView
                android:id="@+id/help_message"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/internal_margin_views"
                android:textAlignment="textStart"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium" />

            <TextView
                android:id="@+id/help_example_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/internal_margin_views"
                android:text="@string/help_dialog_example_title"
                android:textAlignment="center"
                android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

            <TextView
                android:id="@+id/help_example_message"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/internal_margin_views"
                android:textAlignment="textStart"
                android:textAppearance="@style/TextAppearance.AppCompat.Medium" />

            <Button
                android:id="@+id/help_button_ok"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/internal_margin_views"
                android:background="@drawable/button_background"
                android:text="@string/help_dialog_button_ok"
                android:textAlignment="center"
                android:textColor="@color/colorPrimary" />

        </LinearLayout>

    </ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM