动画BottomNavigationView不起作用

时间:2019-09-10 09:10:09

标签: android animation kotlin bottomnavigationview material-components-android

当我单击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
            }
        }


我期望并得到结果:

如果您可以在下一张图片中看到该动画,则无法正常运行。
我希望这样的事情:
Spect 1
Spect 2
但是我得到了这个结果:
Result

已更新

我只需要在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
            }
        }

1 个答案:

答案 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>