Android: layouts are not added under each other

I am trying to add multiple ConstraintLayouts below each other. But they seem to be in the same place. (See Figure).

Question : How to make ConstraintLayouts be below each other?

What's happening now:

Example 1:

enter image description here

Example 2:

enter image description here

How it should look like:

enter image description here

Activity.java

String response = (String) databaseManager.execute(phpLocation,  parameters).get();
        List<Review> listOfReviews = (List<Review>) EntityConverter.getInstance().jsonToObject(response,
                new TypeToken<Collection<Review>>(){}.getType());

        int totalscore = 0;
        int amountOfReviews = 0;

        RelativeLayout relativeLayoutReviews = (RelativeLayout) findViewById(R.id.relativeLayoutReviews);
        for(Review r : listOfReviews) {
            LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = vi.inflate(R.layout.reviewtemplate, null);
            v.setId(amountOfReviews);

            TextView name = (TextView) v.findViewById(R.id.textViewReviewName);
            name.setText(r.getName());

            RatingBar ratingBar = (RatingBar) v.findViewById(R.id.ratingBarReviewScore);
            ratingBar.setRating(r.getScore());
            totalscore += r.getScore();

            TextView ratingText = (TextView) v.findViewById(R.id.textViewReviewText);
            ratingText.setText(r.getReviewtext());

            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

            if (amountOfReviews != 0) {
                // add the rule that places your button below your EditText object
                params.addRule(RelativeLayout.BELOW, v.getId() -1);
            }

            relativeLayoutReviews.addView(v, amountOfReviews);
            amountOfReviews++;
        }

      

reviewtemplate.xml (thing I am trying to insert)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:id="@+id/reviewTemplate"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textViewReviewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Pietje"
        android:textSize="24sp"
        android:textColor="#000000"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent" />

    <RatingBar
        android:id="@+id/ratingBarReviewScore"
        android:layout_width="243dp"
        android:layout_height="58dp"
        android:numStars="5"
        android:rating="0"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/textViewReviewName"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent" />

    <TextView
        android:id="@+id/textViewReviewText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        android:text="Text"
        android:textColor="#000000"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/ratingBarReviewScore" />
</android.support.constraint.ConstraintLayout>

      

RelativeLayout, which will contain all reviews.

<RelativeLayout
            android:id="@+id/relativeLayoutReviews"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginStart="20dp"
            android:layout_marginTop="1dp"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"> 
</RelativeLayout>

      

+3


source to share


2 answers


This is because the root (parent) layout is RelativeLayout instead of LinearLayout.

Child views added to the RelativeLayout are not laid out one after the other because their parent determines their positioning based on their child attributes (hence positioning is relative).



Add them to the vertical LinearLayout.

+1


source


You should use LinearLayout for your vertical layout views.

EDIT:

Use Chains attibute



Can you try?

<RelativeLayout
            android:id="@+id/relativeLayoutReviews"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="20dp"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginStart="20dp"
            android:layout_marginTop="1dp"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_chainStyle="spread" > 
</RelativeLayout>

      

Hope it helps.

+1


source