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

时间:2019-07-25 21:52:27

标签: android bottomnavigationview android-snackbar

我的活动中在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)
                }
            }
        }

理想情况下,我希望小吃栏无需重新绘制即可移至底部。谢谢

2 个答案:

答案 0 :(得分:0)

听起来像您的比赛状态,在绘制小吃栏后,您的能见度就会改变。也许更改事件的顺序会有所帮助。或者,在屏幕底部而不是在底部导航上方绘制小点心栏将达到您想要的目的。

此外,相对于此布局侦听器,您可能有一个真实的观察者/可观察的情况,它订阅可见性达到所需状态的事件,然后重新绘制小吃栏。

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

答案 1 :(得分:0)

唯一起作用的API是属于View类的setY API。获取小吃栏的视图并调用setY值。它立即移动到新的Y值

snackbar.view.setY = 0F