Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: MotionLayout cannot set view visibility to gone, view stays visible

I have layout that is MotionLayout it has to FrameLayouts for which I defined motionscene ConstraintSets start and end. And they are animated correctly.

Then beneath this animated FrameLayouts I've added 2 TextViews and on click I try to hide one and show the other but then both stay visible

 <!-- No Account Line -->
    <TextView
        android:id="@+id/noAccountTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:text="@string/no_account_question"
        android:fontFamily="@font/avenirnext_demibold"
        android:textSize="15sp"
        android:textColor="@color/black"

        tools:ignore="MissingConstraints" />

<TextView
    android:id="@+id/signupTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:text="@string/signup_answer"
    android:fontFamily="@font/avenirnext_demibold"
    android:textSize="15sp"
    android:textColor="@color/colorAccent"

    android:selectAllOnFocus="false"
    android:linksClickable="false"
    android:autoLink="all"

    android:clickable="true"

    tools:ignore="MissingConstraints" />

<TextView
    android:id="@+id/nowTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:text="@string/now_answer"
    android:fontFamily="@font/avenirnext_demibold"
    android:textSize="15sp"
    android:textColor="@color/black"

    tools:ignore="MissingConstraints" />


<androidx.constraintlayout.helper.widget.Flow
    android:id="@+id/noAccountLine"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    app:flow_horizontalGap="8dp"

    app:constraint_referenced_ids="noAccountTextView, signupTextView, nowTextView"
    app:layout_constraintVertical_bias="1.0"

    android:layout_marginBottom="16dp"
    android:visibility="visible"

    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    />

<!-- No Account Line -->

<!-- Have Account Line -->

<TextView
    android:id="@+id/haveAccountTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:text="@string/have_account_question"
    android:fontFamily="@font/avenirnext_demibold"
    android:textSize="15sp"
    android:textColor="@color/black"

    tools:ignore="MissingConstraints" />

<TextView
    android:id="@+id/loginTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:text="@string/log_in_answer"
    android:fontFamily="@font/avenirnext_demibold"
    android:textSize="15sp"
    android:textColor="@color/colorAccent"

    android:selectAllOnFocus="false"
    android:linksClickable="false"
    android:autoLink="all"

    android:clickable="true"

    tools:ignore="MissingConstraints" />

<TextView
    android:id="@+id/insteadTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:text="@string/instead_answer"
    android:fontFamily="@font/avenirnext_demibold"
    android:textSize="15sp"
    android:textColor="@color/black"

    tools:ignore="MissingConstraints" />

<androidx.constraintlayout.helper.widget.Flow
    android:id="@+id/haveAccountLine"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    app:flow_horizontalGap="8dp"

    app:constraint_referenced_ids="haveAccountTextView, loginTextView, insteadTextView"
    app:layout_constraintVertical_bias="1.0"

    android:layout_marginBottom="16dp"
    android:visibility="gone"

    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    />

Can I do this in MotionLayout or I need to wrap FrameLayout inside separate MotionLayout and place it inside ConstraintLayout with this TextView. It seems as start/end state where I not defined behaviour for this TextViews (constraints) is spoiling something.

I've tried to use something like this

override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState)

    signupTextView.setOnClickListener {
        //authenticationFragment.transitionToEnd()
        //isFrontCard = false

        /*
        val transition: Transition = Fade()
        transition.setDuration(350)
        transition.addTarget(R.id.noAccountLine)
        transition.addTarget(R.id.haveAccountLine)

        TransitionManager.beginDelayedTransition(authenticationFragment, transition)
        */

        noAccountLine.isGone = true
        haveAccountLine.isVisible = true
    }

Also after commenting out code it doesn't work. Can I make some views skipped by MotionLayout? Or I need to add another nesting of layouts?

like image 700
Michał Ziobro Avatar asked Oct 19 '25 13:10

Michał Ziobro


1 Answers

you need to create a constrain in file layoutDescription of motionLayout and set visibilityMode = "ignore". like

        <Constraint
        android:id="your view in motion layout"
        app:visibilityMode="ignore"
         />
like image 104
Dat Nguyen Khac Avatar answered Oct 21 '25 02:10

Dat Nguyen Khac