Я пытаюсь сделать строку состояния прозрачной в своем приложении, используя этот код:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setStatusBarColor(Color.TRANSPARENT);

Но не работает. Строка состояния просто изменила цвет и стала серой, а не прозрачной. Где моя ошибка? Как сделать строку состояния прозрачной?

8
BArtWell 26 Окт 2015 в 14:05

2 ответа

Лучший ответ

Попробуйте это в своем styles.xml(v21)

<name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>

Обновить

Вы можете достичь того же эффекта программно на KitKat, а затем, установив этот флаг окна

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            Window w = getWindow(); // in Activity's onCreate() for instance
            w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }

Если вы установите фоновый ресурс (например, цвет или изображение) для своего макета, вы увидите цвет или изображение «под» строкой состояния.

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/primary_dark</item>

Источник

4
Community 23 Май 2017 в 12:10

Попробуйте вызвать это из onCreate:

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

getWindow().setStatusBarColor(Color.TRANSPARENT);
2
prat 26 Окт 2015 в 11:23