根据 BottomNavigationView 的可见性显示时更改 Snackbar 的位置

Change position of Snackbar while it is shown based on BottomNavigationView's visibility

我在 activity 的 CoordinatorLayout 中有一个 BottomNavigationView。我有一个显示在 BottomNav 上方的 Snackbar,所以一切都很好。根据某些条件,修改了 BottomNav 可见性。但是,小吃栏不会调整到屏幕底部。它位于现已消失的 BottomNav

的顶部

我尝试观察底部栏的可见性,并在可见性发生变化时绘制一个新的。然而,在我绘制新的 snackBar 之后,解雇发生了,它解​​雇了它。

        bottomNavigationView.viewTreeObserver.addOnGlobalLayoutListener {
            val newVis = bottomNavigationView.visibility
            if (bottomNavigationView.tag as Int != newVis) {
                bottomNavigationView.tag = bottomNavigationView.visibility
                if (p2NotificationSnackBar != null && p2NotificationSnackBar!!.isShown) {
                    Logger.d(TAG, "BottomNavigationBar visibility changed")

                    val snackBarTextView = p2NotificationSnackBar!!.view.findViewById(android.support.design.R.id.snackbar_text) as TextView
                    val snackBarText = snackBarTextView.text.toString()
                    p2NotificationSnackBar!!.dismiss()
                    p2NotificationCount = currentMessageCount
                    displayP2Notification(message = snackBarText, redrawSnackBar = true)
                }
            }
        }

理想情况下,我希望 snackbar 移动到底部而不需要重新绘制。谢谢

听起来你有一个竞争条件,在你绘制 snackbar 之后你的能见度被改变了。也许改变事件的顺序会有所帮助。或者,将 snackbar 绘制在屏幕底部而不是底部导航上方将实现您的目标。

此外,与此布局侦听器相比,您可能有一个真实的 observer/observable 情况,它订阅可见性达到所需状态的事件,然后重绘快餐栏。

希望对您有所帮助,我认为这里没有快速解决方案。

唯一有效的 API 是属于视图 class 的 setY API。获取 snackbar 的视图并调用 setY 值。它立即移动到新的 Y 值

snackbar.view.setY = 0F