Как изменить цвет строки состояния, чтобы соответствовать приложение в Lollipop? [Андроид]
в новом обновлении lollipop я заметил, что с родными приложениями Google цвет строки состояния изменяется в соответствии с панелью действий в приложении, которое вы запускаете. Я вижу, что это также в приложении Twitter, поэтому я предполагаю, что это не только Google, который может это сделать.
кто-нибудь знает как это сделать, если это возможно?
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 цвет
смотрим на скриншот ниже:
просто добавьте это в свои стили.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 объясняет больше о цветовой палитре. Вы можете прочитать больше об этом ссылке.
другой способ установить цвет строки состояния-через стиль.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));