为什么添加 ViewPager 后状态栏颜色停止变化?

Why does my status bar color stop changing after I add a ViewPager?

我有一个 activity 带有 BottomNavigation 视图,可以导航到不同的片段。我想更改每个片段的状态栏颜色。这与包含 ViewPager 的一个片段不同。一旦我删除这个 ViewPager,状态栏颜色就会按我预期的那样改变,但是当我添加 ViewPager 时,状态栏颜色在 Fragment 膨胀时不会改变。 ViewPager 做了什么阻止这种颜色变化的发生?

我更改状态栏颜色的代码:

fun setStatusBarColor(@ColorRes colorRes: Int, isLight: Boolean) {
        window?.apply {
            statusBarColor = ContextCompat.getColor(this@BaseActivity, colorRes)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                val lightFlag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR.with(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)
                } else {
                    View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                }

                val darkFlag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
                } else {
                    View.VISIBLE
                }
                decorView.systemUiVisibility = if (isLight) lightFlag else darkFlag
            }
        }
    }

包含 ViewPager 的我的片段:

<LinearLayout 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:orientation="vertical"
    tools:context="com.x.x.android.ui.main.account.AccountFragment">

    <include layout="@layout/include_header_user_profile" />

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/account_tab_layout"
        android:layout_width="match_parent"
        android:layout_height="36dp"
        android:background="@drawable/tab_layout_background"
        android:paddingBottom="@dimen/padding_one_half"
        app:tabBackground="@drawable/tab_layout_selector"
        app:tabIndicatorHeight="0dp"
        app:tabMode="fixed"
        app:tabPaddingEnd="@dimen/padding_one_half"
        app:tabPaddingStart="@dimen/padding_one_half"
        app:tabRippleColor="@null"
        app:tabSelectedTextColor="@color/color_primary"
        app:tabTextColor="@color/color_on_primary_unselected" />

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/account_view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

My Main Activity 包含 NavigationController:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@color/color_background"
    tools:context="com.x.x.android.ui.main.HomeActivity">

    <fragment
        android:id="@+id/home_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/main_navigation" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/home_bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:menu="@menu/bottom_nav_menu"
        android:elevation="@dimen/home_bottom_nav_elevation"
        app:labelVisibilityMode="unlabeled"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

更新 我可以确认只有在我的 ViewPager 上设置适配器时才会发生这种情况。因此,如果我注释掉将适配器应用于 viewPager 的代码,颜色会按预期发生变化。

我刚刚解决了这个问题。在我在 ViewPager 中膨胀的片段中,我在这些的 onViewCreated 方法中设置了状态栏颜色,它覆盖了父片段,持有这个视图寻呼机!