Mimic Snackbar + CoordinatorLayout + FAB с новым MotionLayout

Допустим, у нас есть BottomNavigationBar с FAB наверху. При использовании этой настройки и отображении Snackbar, Snackbar должен появляться над BottomNavigationBar и нажимать вверх / вниз FAB при появлении / закрытии.

Это обычный сценарий использования CoordinatorLayout. Можно ли также создать эту анимацию с помощью нового MotionLayout?

В трекере ошибок есть проблема, но она уже закрыта, потому что OP четко не сформулировал вопрос (https://issuetracker.google.com/issues/112665540)

Проблемы, с которыми я столкнулся при попытке: у нас нет доступа к идентификатору макета Snackbar. У нас также нет доступа к общему XML-файлу Snackbar, поэтому мы не можем установить его ограничения.

ОБНОВЛЕНИЕ. Я понимаю, что фрагмент кода поможет в качестве отправной точки для ответа на этот вопрос. Но какой бы фрагмент кода я ни придумал, он совершенно бесполезен. Я выделил 2 основные проблемы:

  1. Я не знаю идентификатор макета Snackbar. Поэтому я не могу использовать его при написании описания сцены.

  2. Даже если бы я мог создать описание сцены (например, State1: SnackBar visible, State2: Snackbar not visible). Мне пришлось бы запускать эти переходы между сценами вручную. Это означает, что я бы воссоздал свою собственную Snackbar вместо того, чтобы использовать исходную Snackbar, как задумано.

КОММЕНТАРИИ: @mikejonesguy Да, на мой взгляд, они похожи. Не то же самое, но похожее. И MotionLayout также выполняет ту работу, которую вы описали: координирует взаимодействие между его подпредставлениями. Замените «координировать» на «анимировать», и вы поймете мою точку зрения. Также обратите внимание на обработчики OnSwipe / OnClick. MotionLayout все еще очень свежий, но я думаю, что в будущем он заменит CoordinatorLayout так же, как ConstraintLayout заменил RelativeLayout. Может я ошибаюсь, а может и нет ... время покажет.

ЗАКЛЮЧЕНИЕ. Насколько я понимаю, кажется (пока) нет способа достичь того, чего я хочу, только с помощью MotionLayout. Если это возможно, когда-нибудь я дополню этот вопрос рабочим примером. Простите за невозможную награду ... :)


comment
Если возможно, разместите связанный код.   -  person Pravin Divraniya    schedule 16.05.2019
comment
Что вы пробовали? Никто не пишет для вас код, просто попробуйте, а затем, если вы где-то потерпите неудачу или вам нужна помощь, тогда ТАК есть.   -  person Akash Dubey    schedule 17.05.2019
comment
Вы говорите о MotionLayout и CoordinatorLayout, как если бы они были похожими животными. Они не. Задача CoordinatorLayout - координировать взаимодействие между его подпредставлениями (то есть, когда появляется SnackBar, анимация FAB и т. Д.). MotionLayout не выполняет эту работу. Так. Возможно ли этого добиться? Может быть. Но вам нужно опубликовать код, чтобы мы могли видеть, с чем вы работаете.   -  person mikejonesguy    schedule 17.05.2019
comment
Я отправил ответ. Если вас это смущает, опубликуйте свой текущий код, и я изменю его, чтобы добиться именно того, что вам нужно.   -  person Nezih Yılmaz    schedule 21.05.2019
comment
Создавали ли вы новую задачу для этого конкретного варианта использования в системе отслеживания ошибок? Или твитнуть ребятам, разрабатывающим motionlayout? Я сделал это для своего варианта использования, и они подобрали его и добавили поддержку одним обновлением позже.   -  person ZeroStatic    schedule 21.05.2019
comment
Да, может быть, это хорошая идея. Как я уже сказал, проблема уже есть, но описана плохо. Возможно, я подниму этот вопрос еще раз в отдельной заявке.   -  person muetzenflo    schedule 21.05.2019


Ответы (1)


Вы можете создавать файлы макета так, как если бы закусочная находится в иерархии макетов. Вам нужно использовать виртуальные вспомогательные объекты Constraintlayout. Виртуальные объекты невидимы, но они действуют как обычный вид во время измерения и компоновки, поэтому их цель - помочь вам создать точное положение, которое вы хотите.

Высота снекбаров по умолчанию составляет минимум 48 точек на дюйм и максимум 80 точек. Вам понадобится эта информация.

person Nezih Yılmaz    schedule 20.05.2019
comment
круто, не знал о виртуальных вспомогательных объектах. Я протестирую это, как только у меня снова появится время для этого проекта (хотя это может занять неделю). Если это нужная подсказка, вы получите награду :) - person muetzenflo; 21.05.2019