Цвет строки состояния не отображается — 5.0 Lollipop Android Studio: (AppCompat-v7:r21)

Я использую библиотеку поддержки AppCompat-v7:21.0.0 для Android 5.0 Lollipop в Android Studio. Моя проблема заключается в том, что цвет строки состояния, который можно изменить, установив colorPrimaryDark в файле values/styles.xml, отображается как черный как в предварительном просмотре макета xml, так и в эмуляторе.

Так что же не так? Я что-то пропустил? Пожалуйста, дайте мне знать. Спасибо.

EDIT: Мне известно, что изменение цвета строки состояния в версиях Pre-Lollipop невозможно. Мой предварительный просмотр редактора макетов XML и мой эмулятор настроены на уровень API 21 (5.0 Lollipop). Но строка состояния по-прежнему не того цвета, который я установил в colorPrimaryDark. Я пытался сделать statusBarColor в styles.xml, но безрезультатно. Он по-прежнему черный.

ТАКЖЕ: Я видел один из ответов на похожий вопрос, где мне посоветовали поставить minSdkVersion на 21. Я пробовал, но не сработало. И я хочу, чтобы мое приложение работало на устройствах с API уровня 15 и выше.


person Adifyr    schedule 23.10.2014    source источник
comment
У меня такая же проблема с моим эмулятором 5.0. Статусбар не меняет цвет. Тот же код на реальном устройстве работает нормально.   -  person Patrick    schedule 24.10.2014
comment
Окей круто. Потом попробую на реальном устройстве и посмотрю. Спасибо.   -  person Adifyr    schedule 25.10.2014
comment
Та же проблема здесь. С эмулятором Android 5.0 это не работает. Он работал с предварительным просмотром L-developer. Печальный.   -  person greywolf82    schedule 25.10.2014
comment
Вы нашли решение этой проблемы? В настоящее время я не могу заставить colorPrimaryDark раскрасить строку состояния на 5.0.   -  person MattWilliams89    schedule 30.10.2014
comment
@ MattWilliams89 проблема в вашем устройстве или в эмуляторе? На эмуляторе и layout.xml в студии Android строка состояния не будет отображаться цветной. Однако на устройстве, согласно тому, что Патрик сказал в комментарии выше, оно должно работать нормально. Если это также не работает на устройстве, ознакомьтесь с ответом ниже, который я отметил, и посмотрите, решит ли это вашу проблему... :)   -  person Adifyr    schedule 06.11.2014
comment
Я обнаружил, что colorPrimaryDark окрашивает строку состояния, если вы используете устройство Galaxy Nexus в эмуляторе (или xhdpi или xxhdp?). К сожалению, он также окрашивает панель инструментов.   -  person Dan Brough    schedule 03.12.2014
comment
У меня такая же проблема. На устройстве цвет строки состояния отображается правильно, как и ожидалось, но когда я пробую его на эмуляторе, он не работает. Пробовал эмулятор с 5.0.2 и 5.1. Если кто нашел решение поделитесь. Заранее спасибо.   -  person Abhijit Kurane    schedule 11.04.2015


Ответы (11)


Пожалуйста, прочитайте это: Чтобы это вступило в силу, окно должно рисовать фон системной панели с

android.view.WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

но

android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS

не должен быть установлен (Источник)

Если вы не знаете, как добавить этот флаг:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
person Wayne    schedule 24.10.2014
comment
Это не работает, извините. Спасибо за подсказку. Может это мой эмулятор? - person Adifyr; 24.10.2014
comment
Протестируйте на реальном устройстве, пожалуйста. Он работает на моем Nexus 7, но не на эмуляторе. Все полупрозрачные функции системных панелей также не работают на эмуляторе. - person Wayne; 24.10.2014
comment
Хе-хе. У меня нет реального устройства с леденцом. Но большое спасибо за решение моей проблемы... - person Adifyr; 24.10.2014
comment
Для FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS требуется API 21, поэтому он не будет работать на устройствах до Lollipop. - person tomrozb; 29.10.2014
comment
Привет, небольшой вопрос, есть ли способ добавить этот флаг через xml? - person Adifyr; 06.11.2014
comment
‹item name=android:windowDrawsSystemBarBackgrounds›true‹/item› - person deviant; 20.11.2014
comment
@девиант Спасибо! Напоминаю, ребята, если вы все собираетесь использовать библиотеку appcompat:v21, то это будет всего лишь <item name="windowDrawsSystemBarBackgrounds">true<item> - person Adifyr; 12.12.2014
comment
Где я должен добавить элемент xml (какой стили.xml и под каким определением стиля)? Я пытался добавить его в values/styles.xml и values-v21/styles.xml под <style name="AppTheme"... или <style name="AppBaseTheme"... безрезультатно. - person Piovezan; 26.03.2015
comment
@ADeveloper Не найден ресурс, соответствующий заданному имени: attr 'windowDrawSystemBarBackgrounds'. Запуск appcompat v22. Это изменилось? - person lostintranslation; 19.05.2015
comment
Работал для меня, используя Xamarin-эквивалент этого. - person Vahid Amiri; 30.01.2016
comment
У меня работало на реальном устройстве (в отличие от эмулятора), используя программный вызов в моей основной деятельности - person benzabill; 08.11.2016

Это сработало для меня:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        getWindow().setStatusBarColor(getResources().getColor(R.color.some_color));
    }
person Philipp E.    schedule 30.11.2014
comment
Спасибо ваш ответ помог мне - person Faxriddin Abdullayev; 22.06.2017

Вы установили целевую версию SDK на 21? У меня была та же проблема, когда я оставил целевую версию SDK на 19. Вы можете оставить минимальную версию SDK на любую более низкую.

И, конечно же, вам нужно наследовать от правильной темы и убедиться, что ваша активность использует ее.

person BladeCoder    schedule 17.11.2014
comment
да. Я сделал все. Оказывается, проблема в том, что эмулятор и предварительный просмотр макета не могут отобразить цвет строки состояния. Говорят, что этот же код работает на реальном устройстве с Lollipop. - person Adifyr; 19.11.2014
comment
Это не работает в предварительном просмотре, но работает в эмуляторе Lollipop. Если вы откроете приложение для набора номера телефона в эмуляторе, вы должны увидеть, например, синюю строку состояния. - person BladeCoder; 20.11.2014

Проверьте, редактируете ли вы styles.xml в папке values-v21. Если вы установите версию SDK 21, он не будет искать styles.xml в папке values (но должен это делать).

введите здесь описание изображения

person gkiko    schedule 31.12.2014
comment
точно была проблема. - person Visores; 11.10.2016

тест на моем nexus7 5.1.1

установить в style.xml v21/v22 не получится

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

но

установить в деятельности

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().setStatusBarColor(getResources().getColor(android.R.color.holo_red_dark));
}

это работа для меня

person Tryagain Tsai    schedule 05.06.2015
comment
может подтвердить это. это такой я беспорядок ... меня тошнит от этого - person sebastian; 08.06.2015
comment
могу подтвердить это nexu 5x 6.0.1 и mx5 5.0.1 - person chefish; 09.09.2016
comment
То же самое, это сводит меня с ума, провел пару дней, борясь с этим. - person Mikhail; 21.11.2016
comment
getColor устарел. какая альтернатива этому? пожалуйста, обновите свой ответ - person Vikas Bansal; 09.02.2017

Изменение цвета строки состояния в версии pre-Lollipop (5.0) невозможно с помощью установки colorPrimaryDark. См. эту статью.

На старых платформах AppCompat по возможности эмулирует цветовую схему. На данный момент это ограничено окраской панели действий и некоторых виджетов.

person Patrick    schedule 23.10.2014
comment
Я знаю об этом. Но тот факт, что мой эмулятор и моя предварительная версия редактора XML-макетов работают на уровне API 21, и он все еще не работает, вызывает у меня дилемму. - person Adifyr; 24.10.2014
comment
Привет @patrick, я новичок в Android. Если цвета строки состояния нельзя изменить с помощью библиотеки AppCompat. Тогда все приложения Google используют другие способы изменения цвета строки состояния в своих приложениях? Я использую Kitkat, и я вижу, как их приложения меняют цвет строки состояния. Ваше мнение оценено по этому поводу... - person Raju; 04.11.2014
comment
@javaman уверен, что мы оба говорим о строке состояния? Полоса вверху экрана с часами и батареей? - person Patrick; 04.11.2014

В моем случае values-v21/styles.xml содержал следующую строку, которая заменяла цвет строки состояния, определенный в values/style.xml, на colorPrimaryDark:

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

Удаление этого сработало для меня.

person mehulmpt    schedule 18.06.2017

В моем случае виновником была jfeinstein10/SlidingMenu библиотека. Я заменил библиотеку на Android navigation drawer, и теперь она правильно отображает цвет строки состояния.

person Starrover    schedule 27.08.2015

В v22-appcompat они (Android) теперь добавили рендеринг цвета строки состояния в предварительном просмотре студии Android!

О времени... В любом случае, убедитесь, что ваша appcompat библиотека обновлена ​​до последней версии, т.е. v22.0.+.

Ваше здоровье!

person Adifyr    schedule 24.10.2014

Я работал над старым приложением и пытался преобразовать его в материальный стиль. Код и все было в порядке, однако единственная ошибка, которая у меня была, заключалась в том, что препятствовала подкрашиванию строки состояния на >= устройствах Lollipop, была "TargetSDKVersion" в build.gradle. Было установлено значение менее 21. Я изменил его на 21, и тонирование строки состояния начало работать.

person Umer Farooq    schedule 19.10.2016

Это сработало для меня. Убран цвет строки состояния из стилей. Добавьте флаг, а затем укажите цвет, который вы хотите, вот так

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getWindow().setStatusBarColor(getResources().getColor(R.color.your_color));
}
person Mwongera808    schedule 18.06.2017