Как изменить цвет строки состояния, чтобы соответствовать приложение в Lollipop? [Андроид]


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

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

7 90

7 ответов:

для изменения цвета строки состояния используйте 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 цвет
  • строка состояния должны использовать основной 700 цвет

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

enter image description here

просто добавьте это в свои стили.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 объясняет больше о цветовой палитре. Вы можете прочитать больше об этом ссылке.

enter image description here

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

для этого создано!--3-->стиль.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>

Edit: как указано в комментариях, при использовании 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>

чтобы задать цвет строки состояния, Создайте стиль.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>

также, если вы хотите другой 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>

затем определите белые / темные темы в вашем 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.

в android pre Lollipop устройств вы можете сделать это от SystemBarTintManager Если вы используете android studio, просто добавьте 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));

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

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