Прозрачная строка состояния Android

Я старался

установка statusBarColor на прозрачный, но оставляет тень

устанавливая windowTranslucentStatus в true, но он оставляет тень

смешал и сопоставил вышеуказанные свойства с fitsSystemWindow... безуспешно

выполнение следующих действий позволяет достичь цели полностью прозрачного статуса... но также делает панель навигации полностью прозрачной

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);
    }

Как я могу сделать только строку состояния 100% прозрачной, не касаясь navBar

minSdk: 21

цель: 26

составить 26

Предварительный просмотр студии Android 3.0 (последняя на 6/6/17)

3 ответа

Я думаю, что вы не можете сделать строку состояния прозрачной на 100%, потому что у активности есть собственный фон окна (фон по умолчанию белый, вы можете установить фон окна, используя getWindow(). SetBackgroundDrawableResource(int resID) или getWindow(). SetBackgroundDrawable(Drawable drawable))

Вы можете установить цвет в строке состояния и установить непрозрачность цвета в шестнадцатеричной форме после setContentView(), показанного в приведенном ниже коде.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        getWindow().setStatusBarColor(Color.parseColor("#00FFFFFF"));
    }

//Here "#00FFFFFF" means opacity is 0% (first two digits 00) and colour is white (next FFFFFF character).

Или в файле styles.xml (только для версий после Lollipop. Совместимость может быть нарушена)

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

Для настройки непрозрачности обратитесь по этой ссылке

Используйте этот шестнадцатеричный цвет #00000000 в строке состояния

Я просто сделал то же самое в тех же условиях

Вы правы насчет FLAG_LAYOUT_NO_LIMITS, но это так (код на kotlin)

//onCreate
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
toolbar.setPadding(0, getStatusBarHeight(), 0, 0)

getStatusBarHeight:

private fun getStatusBarHeight(): Int {
    var result = 0
    val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")
    if (resourceId > 0) {
        result = resources.getDimensionPixelSize(resourceId)
    }
    return result
}

и как вернуть панель навигации - поместите это в ваши стили:

    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
Другие вопросы по тегам