我对于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'
答案 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 工作。
注意: