Компоновка движения не распространяется на оконные вставки - PullRequest
1 голос
/ 12 января 2020
ViewCompat.setOnApplyWindowInsetsListener(fab) { view, insets ->
        val lp = fab.layoutParams as ConstraintLayout.LayoutParams
        lp.bottomMargin += insets.systemWindowInsetBottom
        fab.layoutParams = lp
        insets
    }

Компоновка Motion не передает никаких оконных вставок детям, несмотря на то, что использует вставки, явные в слушателе OnApplyWindowInsetsListener.

Вставки применяются правильно, когда applyMotionScene атрибут макета движения установить на false.

1 Ответ

1 голос
/ 03 февраля 2020
with(ml) { //ml -> your motionLayout id
                    updateState(R.id.start, ConstraintSet().apply {
                        clone(ml)
                        constrainHeight(viewWhichHeightNeedsToChange.id, height.dp + insets.systemWindowInsetTop)
                        applyTo(ml)
                    })
                    setState(R.id.end, ml.width, ml.height)
                    updateState(R.id.end, ConstraintSet().apply {
                        clone(ml)
                        constrainHeight(viewWhichHeightNeedsToChange.id, height.dp + insets.systemWindowInsetTop)
                        applyTo(ml)
                    })
                    setState(R.id.start, ml.width, ml.height)
                }

В основном вам нужно обновить отступы / размер ваших видов в обоих наборах макетов движения. Было бы здорово, если бы был способ сделать это без переключения между состояниями. Этот код выполняется в setOnApplyWindowInsetsListener {} работает с

androidx.constraintlayout: constraintlayout: 2.0.0-beta3

...