BottomNavigationView движется вверх при изменении SystemUI - PullRequest
0 голосов
/ 04 января 2019

У меня есть активность, в которой у меня есть BottomNavigationView. Я сделал отдельные фрагменты для каждого ButtomNavigationView предметов. Я хотел иметь прозрачную строку состояния для одного из фрагментов (HomeFragment) и иметь обычный ActionBar для остальных.

Итак, я устанавливаю прозрачную строку состояния в HomeFragment, как показано ниже

fun enableFullScreen(activity: Activity){
    if ((19 until 21).contains(Build.VERSION.SDK_INT)) {
        setWindowFlag(activity, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true)
    }
    if (Build.VERSION.SDK_INT >= 19) {
        activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    }
    if (Build.VERSION.SDK_INT >= 21) {
        setWindowFlag(activity, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)
        activity.window.statusBarColor = Color.TRANSPARENT
    }
}

private fun setWindowFlag(activity: Activity, bits: Int, on: Boolean) {
    val win = activity.window
    val winParams = win.attributes
    if (on) {
        winParams.flags = winParams.flags or bits
    } else {
        winParams.flags = winParams.flags and bits.inv()
    }
    win.attributes = winParams
}

А в других моих фрагментах я перехожу в нормальное состояние, как показано ниже

fun disableFullScreen(activity: Activity){
    if (Build.VERSION.SDK_INT >= 19) {
        activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE
    }

    if (Build.VERSION.SDK_INT >= 23){
        activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
    }
}

Я получаю то, что намереваюсь сделать, но есть небольшая ошибка, которую я не могу выяснить. Когда я перехожу к HomeFragment, который является прозрачной строкой состояния, BottomNavigationView поднимается и возвращается на свое первоначальное место. Иногда он просто остается включенным, и если я снова нажимаю кнопку Home, он выключается.

enter image description here

Для справки вот мой activity_main макет

<?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:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".main.MainActivity">
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="56dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        app:itemTextColor="@color/green"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/navigation"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Что я делаю не так? Или есть какой-нибудь лучший способ сделать то, что я собираюсь сделать?

...