当我单击BottomNavigationView项时,它在某些版本(例如Marshallow)上没有动画
预期行为:
当我单击项目时,图标变大并显示文本。
但是结果是:
图标保持正常大小并显示文字
代码:
build.gradle(应用程序)
//AndroidX UI
implementation "com.google.android.material:material:1.0.0"
implementation "androidx.appcompat:appcompat:1.1.0"
activity.xml
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/activity_home_custombottombar"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintVertical_bias="1"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@color/app_black"
app:itemIconTint="@drawable/nav_bottombar_item"
app:itemTextColor="@drawable/nav_bottombar_item"
app:labelVisibilityMode="selected"
app:menu="@menu/menu_items" />
menu_item.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_1"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/menu_action_1" />
<item
android:id="@+id/action_2"
android:icon="@drawable/ic_dashboard_black_24dp"
android:title="@string/menu_action_2" />
<item
android:id="@+id/action_3"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/menu_action_3" />
</menu>
nav_bottombar_item.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/app_white" android:state_enabled="true" />
<item android:color="@color/app_black" android:state_enabled="false" />
</selector>
HomeActivity.kt
bottomNavigationView.setOnNavigationItemSelectedListener {
when(it.itemId) {
R.id.action_1 -> {
viewModel.navigationHandler?.switchStack(PredefinedStacks.STACK_ACTION_1)
true
}
R.id.action_2 -> {
viewModel.navigationHandler?.switchStack(PredefinedStacks.STACK_ACTION_2)
true
}
R.id.action_3 -> {
viewModel.navigationHandler?.switchStack(PredefinedStacks.STACK_ACTION_3)
true
}
else -> false
}
}
我期望并得到结果:
如果您可以在下一张图片中看到该动画,则无法正常运行。
我希望这样的事情:
但是我得到了这个结果:
已更新:
我只需要在setOnNavigationItemSelectedListener上调用requestLayout。 显然BottomNavigationView仍然处于阻塞状态,只需要重绘即可。
bottomNavigationView.setOnNavigationItemSelectedListener {
bottomNavigationView.requestLayout()
when(it.itemId) {
R.id.action_1 -> {
viewModel.navigationHandler?.switchStack(PredefinedStacks.STACK_ACTION_1)
true
}
R.id.action_2 -> {
viewModel.navigationHandler?.switchStack(PredefinedStacks.STACK_ACTION_2)
true
}
R.id.action_3 -> {
viewModel.navigationHandler?.switchStack(PredefinedStacks.STACK_ACTION_3)
true
}
else -> false
}
}
答案 0 :(得分:0)
对nav_bottombar_item.xml
的{{1}}进行以下更改:
app:itemTextColor="@drawable/nav_bottombar_item"
并同时添加此<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/app_white" android:state_checked="true" />
<item android:color="@color/app_black" android:state_checked="false" />
</selector>
。