ViewStub в MotionLayout остается невидимым

У меня есть ConstraintLayout с некоторыми представлениями и ViewStub. Я преобразовал его в MotionLayout, но ViewStub не отображается.

У меня такой расклад:

<MotionLayout app:layoutDescription="@xml/motion_scene">
    <Button id="button01"/>
    <ViewStub id="stub" inflatedId="merger"/>
</MotionLayout>

Для данной сцены движения:

<MotionScene>
    <Transition
      app:constraintSetStart="@id/start"
      app:constraintSetEnd="@id/end">
        <OnClick app:clickAction="toggle" app:targetId="button"/>            
    </Transition>
    <ConstraintSet android:id="@+id/start">
        <Constraint android:id="@id/button" ...>
    </ConstraintSet>
    <ConstraintSet android:id="@+id/end">
        <Constraint android:id="@id/button" ...>
    </ConstraintSet>
</MotionScene>

В своей деятельности я установил видимость ViewStub на View.VISIBLE. Это работает, когда я использую ConstraintLayout или MotionLayout без motionscene, что означает, что заглушка представления правильно заменяется своим содержимым, и все видно. Когда я использую сцену с движением, анимация кнопки воспроизводится правильно, но раздутый макет ViewStub невидим (я думаю, не исчез, потому что я вижу его в инспекторе макетов).

Я пробовал использовать свойство

app: visibilityMode = "игнорировать"

безуспешно

Это потому, что MotionLayout все еще находится в разработке или я что-то пропустил? (Еще одна проблема с wrap_content?).

Заранее спасибо !


person Nawick    schedule 03.12.2019    source источник
comment
Такая же проблема здесь!   -  person Gnzlt    schedule 05.12.2019


Ответы (1)


Несколько заметок. Во-первых, чтобы появился viewStub, он должен быть расширен, а не только набор видимости. Поэтому убедитесь, что вы вызываете stub.inflate() где-нибудь в коде.

Кроме того, любые представления, которые вы хотите отображать в MotionLayout, должны быть определены с ограничениями в motionScene. Так что, если вы ожидаете иметь завышенное представление, это завышенное представление должно быть в ограничениях. Что-то вроде этого:

<MotionScene>
<Transition
  app:constraintSetStart="@id/start"
  app:constraintSetEnd="@id/end">
    <OnClick app:clickAction="toggle" app:targetId="button"/>            
</Transition>
<ConstraintSet android:id="@+id/start">
    <Constraint android:id="@id/button" ...>
    <Constraint android:id="@id/merger" ...>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
    <Constraint android:id="@id/button" ...>
    <Constraint android:id="@id/merger" ...>
</ConstraintSet>

Try that and let me know how it goes!

person kjanderson2    schedule 17.01.2020