'Show and hide a View with a slide up/down animation android studio
I have a problem hiding the BottomNavigationView since there is a space left over and I don't know what to do in that case, I don't know what property to use so that the entire BottomNavigationView is hidden, I would appreciate any advice or solution to my problem
Activity_main.XML
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/body_container"
app:hideOnScroll="true"
android:background="@color/light_color"
tools:context=".navigation_bottom">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_margin="30dp"
android:elevation="2dp"
android:background="@drawable/round_corner"
app:menu="@menu/item_menu"
app:itemRippleColor="@android:color/transparent"
app:itemIconSize="30dp"
app:labelVisibilityMode="labeled"
app:itemTextColor="@drawable/text_selector"
app:itemIconTint="@drawable/item_selector"
app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"
app:hideOnScroll="true"
android:layout_gravity="bottom"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Activity_navigation_bottom
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/body_container"
app:hideOnScroll="true"
android:background="@color/light_color"
tools:context=".navigation_bottom">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_margin="30dp"
android:elevation="2dp"
android:background="@drawable/round_corner"
app:menu="@menu/item_menu"
app:itemRippleColor="@android:color/transparent"
app:itemIconSize="30dp"
app:labelVisibilityMode="labeled"
app:itemTextColor="@drawable/text_selector"
app:itemIconTint="@drawable/item_selector"
app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"
app:hideOnScroll="true"
android:layout_gravity="bottom"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
ScrollHandler.kt
class ScrollHandler : CoordinatorLayout.Behavior<BottomNavigationView>() {
override fun layoutDependsOn(
parent: CoordinatorLayout,
child: BottomNavigationView,
dependency: View
): Boolean {
return dependency is FrameLayout
}
override fun onStartNestedScroll(
coordinatorLayout: CoordinatorLayout,
child: BottomNavigationView,
directTargetChild: View,
target: View,
nestedScrollAxes: Int
): Boolean {
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
}
override fun onNestedPreScroll(
coordinatorLayout: CoordinatorLayout,
child: BottomNavigationView,
target: View,
dx: Int,
dy: Int,
consumed: IntArray
) {
if (dy < 0) {
showBottomNavigationView(child)
} else if (dy > 0) {
hideBottomNavigationView(child)
}
}
private fun hideBottomNavigationView(view: BottomNavigationView) {
view.animate().translationY(view.height.toFloat())
}
private fun showBottomNavigationView(view: BottomNavigationView) {
view.animate().translationY(0f)
}
}
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private var bottomNavigationView: BottomNavigationView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
bottomNavigationView = binding.space as BottomNavigationView
val layoutParams = bottomNavigationView!!.layoutParams as CoordinatorLayout.LayoutParams
layoutParams.behavior = ScrollHandler()
setContentView(binding.root)
initRecyclerView()
}
I don't know what to try
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
