Перекладина, Перекрывающая Плавающую Кнопку Действия С Помощью Навигации По Фрагментам

#android #kotlin #android-fragments #floating-action-button #android-snackbar

Вопрос:

У меня возникла странная проблема Snackbar перекрытия a floating action button , которая у меня есть в главном представлении приложения. Для контекста я приведу краткое описание проблемы, с которой я сталкиваюсь. Я инициирую snackbar из отдельного фрагмента после завершения действия (обновление или добавление), затем возвращаюсь к основному представлению (фрагмент списка), в котором snackbar будет отображаться, но кнопка snackbar «плавающее действие» перекрывает плавающую кнопку, а не слегка перемещает ее, даже если макет фрагмента списка содержит макет координатора. Есть какие-нибудь идеи, как обойти эту проблему?

Текущее Поведение:

https://i.imgur.com/Y5GSXZ2.gif

Желаемое Поведение:

https://i.imgur.com/hMfHSa6.gif

Ниже приведен код, который я вызываю при переходе обратно к основному фрагменту (фрагменту списка).

 createSnackBar(requireView(),R.string.successfully_updated, Snackbar.LENGTH_SHORT)
findNavController().navigate(R.id.action_updateFragment_to_listFragment)
 

Реализация функции createSnackBar.

 fun createSnackBar(view: View, @StringRes message: Int, duration: Int) {
    val resources = view.resources
    val snackBar = Snackbar.make(view, resources.getString(message), duration)
    snackBar.show()
}
 

Комментарии:

1. всякий раз, когда вы перемещаетесь, вместо того, чтобы показывать панель закусок во фрагменте обновления (перед навигацией), покажите ее во фрагменте списка, как только вернетесь

2. @ShobhithYadav Как я могу этого добиться?

Ответ №1:

Вам нужно установить кнопку fab на вид привязки SnackBar с помощью setAnchorView

 fun createSnackBar(view: View, @StringRes message: Int, duration: Int) {
    val resources = view.resources
    val snackBar = Snackbar.make(view, resources.getString(message), duration)
    snackBar.setAnchorView(R.id.myFab) // replace myFab with your fab button id
    snackBar.show()
}