Как изменить цвет строки состояния для соответствия приложению в Lollipop? [Android]
В новом обновлении lollipop я заметил, что с родными приложениями Google цвет строки состояния изменяется в соответствии с панелью действий приложения, которое вы используете. Я также вижу это в приложении Twitter, поэтому я предполагаю, что это не единственный Google, который может это сделать.
Кто-нибудь знает, как это сделать, если это возможно?
Ответы
Ответ 1
Чтобы изменить цвет строки состояния, используйте setStatusBarColor (цвет int).
Согласно 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
Посмотрите на скриншот ниже:
![enter image description here]()
Ответ 2
Просто добавьте это в style.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 объясняет больше о цветовой палитре. Вы можете узнать больше об этой ссылке.
![введите описание изображения здесь]()
Ответ 3
Другой способ установить цвет строки состояния - через 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>
Ответ 4
Чтобы установить цвет строки состояния, создайте файл 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>
Ответ 5
В Android-устройствах с поддержкой 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));
Ответ 6
Также, если вы хотите различный цвет 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
.
Ответ 7
Добавьте эту строку в стиле v21, если вы используете два стиля.
<item name="android:statusBarColor">#43434f</item>