Search code examples
androidandroid-xmlandroid-constraintlayoutandroid-cardview

How to make 4 Components fit in constrain layout with equal space around and between them


I have 4 components(boxes) in an ConstraintLayout but the issues is the space between those components is more than the spaces around them I know the issue is because of the margin i have given to each individual component, but what is the work around? to achieve the design given below

What i want to achieve

What i already achieved

Above is what i have achieved so far.

The main issue bothering is the space between those 4 components, it looks more away from each other than looking compact.

here is my xml code

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

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/view_horizontal"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal"
                app:layout_constraintGuide_percent="0.5" />
            
            <!--                Top Left-->
            <FrameLayout
                android:id="@+id/frameLayout_top_left"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintBottom_toTopOf="@+id/view_horizontal"
                app:layout_constraintEnd_toStartOf="@+id/frameLayout_top_right"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintHorizontal_chainStyle="packed"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">
                
                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_17sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_17sdp"
                    android:layout_marginBottom="@dimen/_18sdp"
                    android:backgroundTint="@color/gradient_end_dashboard"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp" />

                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_15sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_15sdp"
                    android:layout_marginBottom="@dimen/_20sdp"
                    android:backgroundTint="@color/white"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

            </FrameLayout>

            <!--                Top Right-->
            <FrameLayout
                android:id="@+id/frameLayout_top_right"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintBottom_toTopOf="@+id/view_horizontal"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toEndOf="@+id/frameLayout_top_left"
                app:layout_constraintTop_toTopOf="parent">
                
                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_17sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_17sdp"
                    android:layout_marginBottom="@dimen/_18sdp"
                    android:backgroundTint="@color/gradient_end_dashboard"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp" />

                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_15sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_15sdp"
                    android:layout_marginBottom="@dimen/_20sdp"
                    android:backgroundTint="@color/white"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

            </FrameLayout>
            
            <!--                Bottom Left-->
            <FrameLayout
                android:id="@+id/frameLayout_bottom_left"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toStartOf="@+id/frameLayout_bottom_right"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/view_horizontal">
                
                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_17sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_17sdp"
                    android:layout_marginBottom="@dimen/_18sdp"
                    android:backgroundTint="@color/gradient_end_dashboard"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp" />

                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_15sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_15sdp"
                    android:layout_marginBottom="@dimen/_20sdp"
                    android:backgroundTint="@color/white"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

            </FrameLayout>

            <!--                Bottom Right-->
            <FrameLayout
                android:id="@+id/frameLayout_bottom_right"
                android:layout_width="0dp"
                android:layout_height="0dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.5"
                app:layout_constraintStart_toEndOf="@+id/frameLayout_bottom_left"
                app:layout_constraintTop_toBottomOf="@id/view_horizontal">
                
                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_17sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_17sdp"
                    android:layout_marginBottom="@dimen/_18sdp"
                    android:backgroundTint="@color/gradient_end_dashboard"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp" />

                <androidx.cardview.widget.CardView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_15sdp"
                    android:layout_marginTop="@dimen/_20sdp"
                    android:layout_marginEnd="@dimen/_15sdp"
                    android:layout_marginBottom="@dimen/_20sdp"
                    android:backgroundTint="@color/white"
                    app:cardCornerRadius="20dp"
                    app:cardElevation="5dp"
                    app:cardMaxElevation="5dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

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

Solution

  • Try using relative layout instead of frame layout and shift your layout/imageview inside the second cardView

    <RelativeLayout
        android:id="@+id/rl_top_left"
        android:layout_height="0dp"
        android:layout_width="0dp"
        app:layout_constraintBottom_toTopOf="@+id/rl_bottom_left"
        app:layout_constraintEnd_toStartOf="@+id/rl_top_right"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#163042"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginEnd="7dp"
            android:layout_marginStart="7dp"
            android:layout_marginTop="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp" />
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#ffffff"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_margin="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <LinearLayout
                android:elevation="10dp"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_width="wrap_content"
                android:orientation="vertical">
    
                <ImageView
                    android:layout_gravity="center"
                    android:layout_height="40dp"
                    android:layout_width="40dp"
                    android:src="@drawable/ic_apple" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="Some Text"
                    android:textColor="#abcdef"
                    android:textSize="22sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="sub text"
                    android:textColor="#009688"
                    android:textSize="14sp"
                    android:textStyle="bold" />
    
    
            </LinearLayout>
    
        </androidx.cardview.widget.CardView>
    
    </RelativeLayout>
    
    <RelativeLayout
        android:id="@+id/rl_top_right"
        android:layout_height="0dp"
        android:layout_width="0dp"
        app:layout_constraintBottom_toTopOf="@+id/rl_bottom_right"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/rl_top_left"
        app:layout_constraintTop_toTopOf="parent">
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#163042"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginEnd="7dp"
            android:layout_marginStart="7dp"
            android:layout_marginTop="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp" />
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#ffffff"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_margin="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <LinearLayout
                android:elevation="10dp"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_width="wrap_content"
                android:orientation="vertical">
    
                <ImageView
                    android:layout_gravity="center"
                    android:layout_height="40dp"
                    android:layout_width="40dp"
                    android:src="@drawable/ic_apple" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="Some Text"
                    android:textColor="#abcdef"
                    android:textSize="22sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="sub text"
                    android:textColor="#009688"
                    android:textSize="14sp"
                    android:textStyle="bold" />
    
    
            </LinearLayout>
    
        </androidx.cardview.widget.CardView>
    
    </RelativeLayout>
    
    <RelativeLayout
        android:id="@+id/rl_bottom_left"
        android:layout_height="0dp"
        android:layout_width="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/rl_bottom_right"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/rl_top_left">
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#163042"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginEnd="7dp"
            android:layout_marginStart="7dp"
            android:layout_marginTop="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp" />
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#ffffff"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_margin="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <LinearLayout
                android:elevation="10dp"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_width="wrap_content"
                android:orientation="vertical">
    
                <ImageView
                    android:layout_gravity="center"
                    android:layout_height="40dp"
                    android:layout_width="40dp"
                    android:src="@drawable/ic_apple" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="Some Text"
                    android:textColor="#abcdef"
                    android:textSize="22sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="sub text"
                    android:textColor="#009688"
                    android:textSize="14sp"
                    android:textStyle="bold" />
    
    
            </LinearLayout>
    
        </androidx.cardview.widget.CardView>
    
    </RelativeLayout>
    
    <RelativeLayout
        android:id="@+id/rl_bottom_right"
        android:layout_height="0dp"
        android:layout_width="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/rl_bottom_left"
        app:layout_constraintTop_toBottomOf="@+id/rl_top_right">
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#163042"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginEnd="7dp"
            android:layout_marginStart="7dp"
            android:layout_marginTop="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp" />
    
        <androidx.cardview.widget.CardView
            android:backgroundTint="#ffffff"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_margin="7dp"
            android:layout_width="match_parent"
            app:cardCornerRadius="20dp"
            app:cardElevation="5dp"
            app:cardMaxElevation="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <LinearLayout
                android:elevation="10dp"
                android:layout_gravity="center"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_width="wrap_content"
                android:orientation="vertical">
    
                <ImageView
                    android:layout_gravity="center"
                    android:layout_height="40dp"
                    android:layout_width="40dp"
                    android:src="@drawable/ic_apple" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="Some Text"
                    android:textColor="#abcdef"
                    android:textSize="22sp"
                    android:textStyle="bold" />
    
                <TextView
                    android:layout_gravity="center"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="5dp"
                    android:layout_width="wrap_content"
                    android:text="sub text"
                    android:textColor="#009688"
                    android:textSize="14sp"
                    android:textStyle="bold" />
    
    
            </LinearLayout>
    
        </androidx.cardview.widget.CardView>
    
    </RelativeLayout>
    

    enter image description here