MotionLayout应用loadLayoutDescription

时间:2018-11-20 16:09:44

标签: android-motionlayout

我对于MotionLayout有2种不同的行为。想法是根据应用程序状态更改它们。但是当我从代码设置时:

if(smth) {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
} else {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
}

未应用约束。但是它们在拖动运动后应用。是否有一些解决方法,或者是因为ConstraintLayout 2.0.0 alpha? 我正在使用:

'com.android.support.constraint:constraint-layout:2.0.0-alpha2'

5 个答案:

答案 0 :(得分:0)

我在MotionScene中有过渡。

<Transition
    motion:constraintSetStart="@id/start"
    motion:constraintSetEnd="@id/end"
    motion:duration="1000"
    motion:interpolator="linear">

“ MotionLayout.loadLayoutDescription”之后未设置初始约束。 我加了:

MotionLayout.setTransition(R.id.start, R.id.end)

并正确应用约束。

答案 1 :(得分:0)

有些变通办法,但确实可行

if(smth) {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
   constraintToolbar.setTransition(R.id.start1, R.id.end1)
} else {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
   constraintToolbar.setTransition(R.id.start2, R.id.end2)
}

答案 2 :(得分:0)

loadLayoutDescription我想只用在androidx

implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'

或者如果您不使用androidx,则必须将constraintToolbar更改为运动

val motion = MotionLayout(this)

motion.loadLayoutDescription

答案 3 :(得分:0)

您必须在加载布局后设置事务。

        if(smth) {
            constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
            motionContainer.setTransition(R.id.start1 ,R.id.end1)

        } else {
            constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
            motionContainer.setTransition(R.id.start1, R.id.end1)
        }

答案 4 :(得分:0)

后调用

if(smth) {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_1)
} else {
   constraintToolbar.loadLayoutDescription(R.xml.layout_description_2)
}

调用 motionLayout.requestlayout() 以让新的 MotionScene 工作。

<块引用>

注意: 中的第一个 会起作用。