スクロールでBottom navigationを隠したく、調べたのでメモ。
ヘルパー的なものを自前で用意する必要があるみたい。
BottomNavigationScrollingBehavior.kt
class BottomNavigationScrollingBehavior<V : View>(context: Context, attrs: AttributeSet) :
CoordinatorLayout.Behavior<V>(context, attrs) {
override fun layoutDependsOn(parent: CoordinatorLayout?, child: V, dependency: View?): Boolean {
if (dependency is Snackbar.SnackbarLayout) {
updateSnackbar(child, dependency)
}
return super.layoutDependsOn(parent, child, dependency)
}
override fun onStartNestedScroll(
coordinatorLayout: CoordinatorLayout, child: V, directTargetChild: View, target: View, axes: Int, type: Int
): Boolean {
return axes == ViewCompat.SCROLL_AXIS_VERTICAL
}
override fun onNestedPreScroll(
coordinatorLayout: CoordinatorLayout, child: V, target: View, dx: Int, dy: Int, consumed: IntArray, type: Int
) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type)
child.translationY = max(0f, min(child.height.toFloat(), child.translationY + dy))
}
private fun updateSnackbar(child: View, snackbarLayout: Snackbar.SnackbarLayout) {
if (snackbarLayout.layoutParams is CoordinatorLayout.LayoutParams) {
val params = snackbarLayout.layoutParams as CoordinatorLayout.LayoutParams
params.anchorId = child.id
params.anchorGravity = Gravity.TOP
params.gravity = Gravity.TOP
snackbarLayout.layoutParams = params
}
}
}
layout.xml
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:itemBackground="@color/bottomNavigationItemBackground"
app:itemIconTint="@color/bottom_navigation"
app:itemTextColor="@color/bottom_navigation"
app:layout_behavior="us.sample.presentation.home.BottomNavigationScrollingBehavior"
app:menu="@menu/bottom_navigation">
</android.support.design.widget.BottomNavigationView>
レイアウト側でlayout_behavior
を設定してあげればok
参考
このサンプルは動きがカクカクする
https://stackoverflow.com/questions/44777869/hide-show-bottomnavigationview-on-scroll
こっちは滑らか & FABとかSnackbarにも対応してる
https://android.jlelse.eu/scroll-your-bottom-navigation-view-away-with-10-lines-of-code-346f1ed40e9e
https://gist.github.com/ValCanBuild/4bbcb47576e875a17440cf2c438e030a
Material Design Guideline
https://material.io/design/components/bottom-navigation.html#behavior