【问题标题】:Android: MotionLayout cannot set view visibility to gone, view stays visibleAndroid:MotionLayout 无法将视图可见性设置为消失,视图保持可见
【发布时间】:2020-05-07 16:33:09
【问题描述】:

我的布局是 MotionLayout,它必须是 FrameLayouts,我为其定义了 motionscene ConstraintSets start 和 end。他们的动画是正确的。

然后在这个动画 FrameLayouts 下,我添加了 2 个 TextView,点击时我尝试隐藏一个并显示另一个,但随后都保持可见

 <!-- 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"
    />

我可以在 MotionLayout 中执行此操作,还是需要将 FrameLayout 包装在单独的 MotionLayout 中,并使用此 TextView 将其放置在 ConstraintLayout 中。 它似乎是开始/结束状态,我没有为此 TextViews 定义行为(约束) 正在破坏某些东西。

我尝试过使用类似的东西

覆盖 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
    }

在注释掉代码后它也不起作用。我可以让 MotionLayout 跳过一些视图吗?或者我需要添加另一个布局嵌套?

【问题讨论】:

    标签: android android-motionlayout


    【解决方案1】:

    你需要在motionLayout的文件layoutDescription中创建一个约束并且设置visibilityMode = "ignore"。 喜欢

            <Constraint
            android:id="your view in motion layout"
            app:visibilityMode="ignore"
             />
    

    【讨论】:

      猜你喜欢
      • 2018-07-15
      • 1970-01-01
      • 2017-10-24
      • 2020-12-05
      • 2015-04-17
      • 2014-10-05
      • 1970-01-01
      • 2017-05-24
      • 2013-11-09
      相关资源
      最近更新 更多