Как изменить цвет строки состояния в соответствии с приложением в Lollipop? [Android]


96

В новом обновлении леденца на палочке я заметил, что с родными приложениями Google цвет строки состояния изменяется, чтобы соответствовать панели действий в приложении, которое вы запускаете. Я также вижу это в приложении Twitter, так что я предполагаю, что это может сделать не только Google.

Кто-нибудь знает, как это сделать, если можно?

Ответы:


221

Чтобы изменить цвет строки состояния, используйте setStatusBarColor (int color) . Согласно javadoc, нам также нужно установить некоторые флаги в окне.

Рабочий фрагмент кода:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


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

  • ActionBar должен использовать основной цвет 500
  • StatusBar должен использовать основной цвет 700

Посмотрите на скриншот ниже:

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


4
Обратите внимание, что эффект может не отображаться в эмуляторе. Например, этот пример проекта окрашивает строку состояния на Nexus 9, но не на эмуляторе Android 5.0.
— CommonsWare

1
@mate: Я имел в виду эмулятор Android SDK. Приятно знать, что он работает над Genymotion.
— CommonsWare 01

3
@Azad Нет, не надо. Чтобы использовать приведенный выше фрагмент кода, вы должны убедиться, что ваше устройство работает на API 21 или выше.
— klimat 08

1
Я работаю над относительно простым проектом, и должен сказать, что просто использовал, getWindow().setStatusBarColor(activity.getResources().getColor(R.color.example_color));и он отлично работал. Не уверен в контексте, в котором флаги строго необходимы.
— Хоакин Юрчук 06

3
Я также хочу показать цвет в устройствах до леденца на палочке. Как это сделать?
— WISHY

48

Просто добавьте это в свой файл styles.xml. ColorPrimary предназначен для панели действий, а colorPrimaryDark - для строки состояния.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>

Это изображение от разработчика Android объясняет больше о цветовой палитре. Вы можете прочитать больше по этой ссылке .

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


Android Studio создает следующие записи для каждого проекта: <color name="colorPrimary">#somecolor</color>и <color name="colorPrimaryDark">#somecolor</color>. Их можно менять для достижения желаемого эффекта.
— Neurotransmitter

41

Другой способ установить цвет строки состояния - использовать файл style.xml .

Для этого создайте файл style.xml в папке res / values-v21 с таким содержимым:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

Изменить: как указано в комментариях, при использовании AppCompat код отличается. Вместо этого в файле res / values ​​/ style.xml используйте:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompat’s color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>

1
Сделал это. Но не вышло. Но тогда я использую AppCompat вместо Material.
— Мартин

3
@Martin Для appcompat используйте colorPrimaryDark без префикса android.
— Michiel

не работает и для appcompat (проверено на уровне 18)
— Мохаммад Зекралла

Цвет строки состояния будет работать только на устройствах с OS API уровня 21 и выше. Также в манифесте убедитесь, что вы не отменяете этот стиль для отдельных действий.
— Левон

для inappbrowser, как изменить цвет панели поиска так же, как цвет приложения
— Р.Анандан

23

Чтобы установить цвет строки состояния, создайте файл style.xml в папке res / values-v21 со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/blue</item>
    </style>

</resources>

в нем говорится, что не удается разрешить символ windowDrawsSystemBarBackgrounds
— jmhostalet

4

Добавьте эту строку в стиле v21, если вы используете два стиля.

  <item name="android:statusBarColor">#43434f</item>

Это не работает без установки флагаandroid:windowDrawsSystemBarBackgrounds
— Славянин

4

Также, если вам нужен другой status-barцвет для разных действий ( фрагменты ), вы можете сделать это, выполнив следующие шаги (работайте с API 21 и выше):

Сначала создайте values21/style.xmlи поместите следующий код:

 <style name="AIO" parent="AIOBase">
            <item name="android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="android:windowContentTransitions">true</item>
    </style>

Затем определите темы White | Dark values/style.xmlследующим образом:

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
        </item>
        <item name="android:textColor">@color/gray_darkest</item>
        <item name="android:windowBackground">@color/default_bg</item>
        <item name="android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
        </item>
    </style>

Также не забудьте применить темы в вашем manifest.xml.


2

В устройствах Android pre Lollipop вы можете сделать это из SystemBarTintManager. Если вы используете студию Android, просто добавьте Systembartint lib в свой файл gradle.

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

Тогда в вашей деятельности

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.