根据 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
我在 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