【问题标题】:Change position of Snackbar while it is shown based on BottomNavigationView's visibility根据 BottomNavigationView 的可见性更改 Snackbar 的位置
【发布时间】:2019-12-04 05:45:51
【问题描述】:

我的活动中的 CoordinatorLayout 中有一个 BottomNavigationView。我有一个 Snackbar,显示在 BottomNav 上方,所以一切都很好。基于某些条件,BottomNav 可见性被修改。然而,snackbar 不会调整到屏幕底部。它停留在现已消失的 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)
                }
            }
        }

理想情况下,我希望快餐栏无需重绘即可移至底部。谢谢

【问题讨论】:

    标签: android bottomnavigationview android-snackbar


    【解决方案1】:

    听起来你有一个比赛条件,在你绘制小吃栏后你的可见性会改变。也许改变事件的顺序会有所帮助。或者,在屏幕底部而不是底部导航上方绘制小吃栏可能会实现您的目标。

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

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

    【讨论】:

      【解决方案2】:

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

      snackbar.view.setY = 0F
      

      【讨论】:

        猜你喜欢
        • 2019-02-15
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        • 2013-06-30
        • 1970-01-01
        • 2013-02-18
        • 2015-06-24
        • 2011-01-08
        相关资源
        最近更新 更多