Mahmoud Manson
Mahmoud Manson

Reputation: 35

Cardviews not scrollable inside scrollview

In the beginning, I searched for a solution to the problem extensively but couldn't resolve it, even after trying all the solutions and answers to similar questions here.

I have a scrollview which contain cardviews but it is not scrollable .. here is the code

    <?xml version="1.0" encoding="utf-8"?>

<ScrollView 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"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="parent">

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

        <androidx.cardview.widget.CardView
            android:id="@+id/cdAL1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            app:cardBackgroundColor="@color/white"
            app:cardCornerRadius="20dp"
            app:cardElevation="1dp"
            app:layout_constraintDimensionRatio="1:1"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_percent="0.46">

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

                <TextView
                    android:id="@+id/tvAL1"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorAccent"
                    android:fontFamily="@font/party_confetti"
                    android:gravity="center"
                    android:text="@string/level1"
                    android:textColor="@color/white"
                    android:textSize="40sp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

                <ImageView
                    android:id="@+id/imgL1"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="8dp"
                    android:contentDescription="@string/description"
                    android:src="@drawable/last"
                    app:layout_constraintBottom_toTopOf="@+id/imgB1"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/tvAL1" />

                <TextView
                    android:id="@+id/tvAL1L"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:fontFamily="@font/party_confetti"
                    android:text="@string/zero"
                    android:textColor="@color/colorAccent"
                    android:textSize="42sp"
                    app:layout_constraintBottom_toBottomOf="@+id/imgL1"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintStart_toEndOf="@+id/imgL1"
                    app:layout_constraintTop_toTopOf="@+id/imgL1" />

                <ImageView
                    android:id="@+id/imgB1"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="16dp"
                    android:layout_marginBottom="8dp"
                    android:contentDescription="@string/description"
                    android:src="@drawable/best"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/imgL1" />

                <TextView
                    android:id="@+id/tvAL1B"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="8dp"
                    android:fontFamily="@font/party_confetti"
                    android:text="@string/zero"
                    android:textColor="@color/colorAccent"
                    android:textSize="42sp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintStart_toEndOf="@+id/imgB1"
                    app:layout_constraintTop_toTopOf="@+id/imgB1" />
            </androidx.constraintlayout.widget.ConstraintLayout>

        </androidx.cardview.widget.CardView>

        <androidx.cardview.widget.CardView
            android:id="@+id/addLevel2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            app:cardBackgroundColor="@color/white"
            app:cardCornerRadius="20dp"
            app:cardElevation="1dp"
            app:layout_constraintDimensionRatio="1:1"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_percent="0.46">

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

                <TextView
                    android:id="@+id/tvAL2"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorAccent"
                    android:fontFamily="@font/party_confetti"
                    android:gravity="center"
                    android:text="@string/level2"
                    android:textColor="@color/white"
                    android:textSize="40sp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

                <ImageView
                    android:id="@+id/imgL2"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="8dp"
                    android:contentDescription="@string/description"
                    android:src="@drawable/last"
                    app:layout_constraintBottom_toTopOf="@+id/imgB2"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/tvAL2" />

                <TextView
                    android:id="@+id/tvAL2L"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:fontFamily="@font/party_confetti"
                    android:text="@string/zero"
                    android:textColor="@color/colorAccent"
                    android:textSize="42sp"
                    app:layout_constraintBottom_toBottomOf="@+id/imgL2"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintStart_toEndOf="@+id/imgL2"
                    app:layout_constraintTop_toTopOf="@+id/imgL2" />

                <ImageView
                    android:id="@+id/imgB2"
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="16dp"
                    android:layout_marginBottom="8dp"
                    android:contentDescription="@string/description"
                    android:src="@drawable/best"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/imgL2" />

                <TextView
                    android:id="@+id/tvAL2B"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="8dp"
                    android:fontFamily="@font/party_confetti"
                    android:text="@string/zero"
                    android:textColor="@color/colorAccent"
                    android:textSize="42sp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintStart_toEndOf="@+id/imgB2"
                    app:layout_constraintTop_toTopOf="@+id/imgB2" />
            </androidx.constraintlayout.widget.ConstraintLayout>


        </androidx.cardview.widget.CardView>

<!-- more cardviews are here -->

    </androidx.constraintlayout.widget.ConstraintLayout>

</ScrollView>

Note: The code above is icluded in another xml file

<include
layout="@layout/###"
 android:layout_width="match_parent"
 android:layout_height="wrap_content" />

EDIT: I replaced ConstraintLayout with LinearLayout and still have the same problem

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

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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="2">

            <androidx.cardview.widget.CardView
                android:id="@+id/cdAL1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_weight="1"
                app:cardBackgroundColor="@color/white"
                app:cardCornerRadius="20dp"
                app:cardElevation="1dp"
                app:layout_constraintDimensionRatio="1:1"
                app:layout_constraintWidth_percent="0.46">

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

                    <TextView
                        android:id="@+id/tvAL1"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="@color/colorAccent"
                        android:fontFamily="@font/party_confetti"
                        android:gravity="center"
                        android:text="@string/level1"
                        android:textColor="@color/white"
                        android:textSize="40sp"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent" />

                    <ImageView
                        android:id="@+id/imgL1"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:layout_marginStart="16dp"
                        android:layout_marginTop="8dp"
                        android:contentDescription="@string/description"
                        android:src="@drawable/last"
                        app:layout_constraintBottom_toTopOf="@+id/imgB1"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/tvAL1" />

                    <TextView
                        android:id="@+id/tvAL1L"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="@font/party_confetti"
                        android:text="@string/zero"
                        android:textColor="@color/colorAccent"
                        android:textSize="42sp"
                        app:layout_constraintBottom_toBottomOf="@+id/imgL1"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintHorizontal_bias="0.5"
                        app:layout_constraintStart_toEndOf="@+id/imgL1"
                        app:layout_constraintTop_toTopOf="@+id/imgL1" />

                    <ImageView
                        android:id="@+id/imgB1"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:layout_marginStart="16dp"
                        android:layout_marginTop="16dp"
                        android:layout_marginBottom="8dp"
                        android:contentDescription="@string/description"
                        android:src="@drawable/best"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/imgL1" />

                    <TextView
                        android:id="@+id/tvAL1B"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="8dp"
                        android:fontFamily="@font/party_confetti"
                        android:text="@string/zero"
                        android:textColor="@color/colorAccent"
                        android:textSize="42sp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintHorizontal_bias="0.5"
                        app:layout_constraintStart_toEndOf="@+id/imgB1"
                        app:layout_constraintTop_toTopOf="@+id/imgB1" />
                </androidx.constraintlayout.widget.ConstraintLayout>

            </androidx.cardview.widget.CardView>

            <androidx.cardview.widget.CardView
                android:id="@+id/addLevel2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:layout_weight="1"
                app:cardBackgroundColor="@color/white"
                app:cardCornerRadius="20dp"
                app:cardElevation="1dp"
                app:layout_constraintDimensionRatio="1:1"
                app:layout_constraintWidth_percent="0.46">

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

                    <TextView
                        android:id="@+id/tvAL2"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:background="@color/colorAccent"
                        android:fontFamily="@font/party_confetti"
                        android:gravity="center"
                        android:text="@string/level2"
                        android:textColor="@color/white"
                        android:textSize="40sp"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent" />

                    <ImageView
                        android:id="@+id/imgL2"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:layout_marginStart="16dp"
                        android:layout_marginTop="8dp"
                        android:contentDescription="@string/description"
                        android:src="@drawable/last"
                        app:layout_constraintBottom_toTopOf="@+id/imgB2"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/tvAL2" />

                    <TextView
                        android:id="@+id/tvAL2L"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:fontFamily="@font/party_confetti"
                        android:text="@string/zero"
                        android:textColor="@color/colorAccent"
                        android:textSize="42sp"
                        app:layout_constraintBottom_toBottomOf="@+id/imgL2"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintHorizontal_bias="0.5"
                        app:layout_constraintStart_toEndOf="@+id/imgL2"
                        app:layout_constraintTop_toTopOf="@+id/imgL2" />

                    <ImageView
                        android:id="@+id/imgB2"
                        android:layout_width="50dp"
                        android:layout_height="50dp"
                        android:layout_marginStart="16dp"
                        android:layout_marginTop="16dp"
                        android:layout_marginBottom="8dp"
                        android:contentDescription="@string/description"
                        android:src="@drawable/best"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/imgL2" />

                    <TextView
                        android:id="@+id/tvAL2B"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="8dp"
                        android:fontFamily="@font/party_confetti"
                        android:text="@string/zero"
                        android:textColor="@color/colorAccent"
                        android:textSize="42sp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintHorizontal_bias="0.5"
                        app:layout_constraintStart_toEndOf="@+id/imgB2"
                        app:layout_constraintTop_toTopOf="@+id/imgB2" />
                </androidx.constraintlayout.widget.ConstraintLayout>


            </androidx.cardview.widget.CardView>

        </LinearLayout>

<!-- more cardviews here -->


    </LinearLayout>

</ScrollView> 

Upvotes: 0

Views: 44

Answers (1)

rajeev ranjan
rajeev ranjan

Reputation: 230

The main issue with your layout is the use of a ConstraintLayout inside a ScrollView. The ConstraintLayout doesn't handle wrapping content in a way that allows it to grow vertically inside a ScrollView easily, especially with complex constraints. This can prevent the ScrollView from scrolling as expected.

Here are the steps to troubleshoot and fix the scrolling issue: 1.Ensure Vertical Layout: Ensure that your ConstraintLayout can grow vertically. Sometimes, defining app:layout_constraintTop_toBottomOf="parent" and app:layout_constraintBottom_toBottomOf="parent" can restrict the height. Remove these constraints if they exist.

2.Use a LinearLayout or Nested ConstraintLayouts: A LinearLayout with vertical orientation inside the ScrollView might be more straightforward for a scrollablelist of items. You can also use nested ConstraintLayout for each card if you need complex constraints within each card.

3.Debugging the ScrollView Content: To debug, simplify the layout to see if the ScrollView starts working with basic content, then gradually add complexity. I found this solution here

Upvotes: 0

Related Questions