75

I have 2 TextViews as in the xml below. If I hide the textView2 at runtime, I lose the bottom margin. How can I keep the bottom margin between textView and parent to be 16dp when the textView2 is gone.

<?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:layout_height="wrap_content">

  <TextView
      android:id="@+id/textView"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_marginBottom="16dp"
      android:layout_marginEnd="8dp"
      android:layout_marginStart="8dp"
      android:layout_marginTop="8dp"
      android:text="abc"
      app:layout_constraintBottom_toTopOf="@+id/textView2"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="parent"
      app:layout_constraintVertical_chainStyle="packed"
      />

  <TextView
      android:id="@+id/textView2"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_marginBottom="32dp"
      android:layout_marginEnd="8dp"
      android:layout_marginStart="8dp"
      android:text="xyz"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="@+id/textView"
      app:layout_constraintVertical_chainStyle="packed"/>
</android.support.constraint.ConstraintLayout>
pt2121
  • 11,720
  • 8
  • 52
  • 69

2 Answers2

125

Use layout_goneMarginBottom:

<?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:layout_height="wrap_content">

  <TextView
      android:id="@+id/textView"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_marginBottom="16dp"
      android:layout_marginEnd="8dp"
      android:layout_marginStart="8dp"
      android:layout_marginTop="8dp"
      android:text="abc"
      app:layout_goneMarginBottom="16dp"
      app:layout_constraintBottom_toTopOf="@+id/textView2"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="parent"
      app:layout_constraintVertical_chainStyle="packed"
      />

  <TextView
      android:id="@+id/textView2"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_marginBottom="32dp"
      android:layout_marginEnd="8dp"
      android:layout_marginStart="8dp"
      android:text="xyz"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="@+id/textView"
      app:layout_constraintVertical_chainStyle="packed"/>
</android.support.constraint.ConstraintLayout>
Benjamin
  • 7,055
  • 6
  • 40
  • 60
  • 8
    Thanks for the example! In my case I was setting `layout_goneMarginTop` in the view I was hiding, instead of setting `layout_goneMarginBottom` in the view that I wanted to stay visible and keep the margin. – Lucas P. Jul 07 '20 at 14:35
12

Below example helps to understand this concept

enter image description here

Below are the constraints for text3

 app:layout_goneMarginStart="100dp"
 app:layout_constraintStart_toEndOf="@id/text2"
 android:layout_marginStart="10dp"

since we had set start constraint with text2 for text3

  • when text2 is visible, android:layout_marginStart="10dp" will be considered
  • when text2 is gone,app:layout_goneMarginStart="100dp" will be considered as text3 start constraint is with text2.

So, when startConstraint is gone it considers goneMarginStart.Similarly,if endConstraint is gone, goneMarginEnd will be considered as below

enter image description here

Tarun Anchala
  • 2,232
  • 16
  • 15