Изменение цвета строки состояния с помощью AppCompat ActionBarActivity
В одном из моих занятий я изменил цвет панели инструментов, используя Palette
. Но на устройствах 5.0, использующих ActionBarActivity
, цвет status bar
- это цвет моего colorPrimaryDark
в моей теме активности, поэтому у меня есть 2 очень разных цвета, и он не выглядит хорошо.
Я понимаю, что в 5.0 вы можете использовать Window.setStatusBarColor()
, но у ActionBarActivity
этого нет.
так что мой вопрос в 5.0, как я могу изменить цвет строки состояния с помощью ActionBarActivity
?
Ответы
Ответ 1
Я не уверен, что понимаю проблему.
Я хочу программно изменить цвет панели состояния (при условии, что устройство имеет Android 5.0), тогда вы можете использовать Window.setStatusBarColor()
, Не должно иметь значения, является ли действие производным от Activity
или ActionBarActivity
.
Просто попробуйте сделать:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.BLUE);
}
Просто проверил это с помощью ActionBarActivity
, и он работает хорошо.
Примечание: установка флага FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
программно не требуется, если ваш файл стилей values-v21
уже установлен, используя:
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
Ответ 2
Существуют различные способы изменения цвета строки состояния.
1) Использование styles.xml. Вы можете использовать атрибут android: statusBarColor, чтобы сделать это простым, но статическим способом.
Примечание. Этот атрибут можно также использовать с темой Материал.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
2) Вы можете сделать это динамически, используя метод setStatusBarColor (int) в классе Window. Но помните, что этот метод доступен только для API 21 или выше. Поэтому не забудьте проверить это, или ваше приложение, безусловно, потерпит крах в более низких устройствах.
Вот рабочий пример этого метода.
if (Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}
где primaryDark - это 700 оттенков основного цвета, который я использую в своем приложении. Вы можете определить этот цвет в файле colors.xml.
Попробуйте и дайте мне знать, если у вас есть какие-либо вопросы. Надеюсь, что это поможет.
Ответ 3
Я не думаю, что цвет панели состояния еще не реализован в AppCompat. Это доступные атрибуты:
<!-- ============= -->
<!-- Color palette -->
<!-- ============= -->
<!-- The primary branding color for the app. By default, this is the color applied to the
action bar background. -->
<attr name="colorPrimary" format="color" />
<!-- Dark variant of the primary branding color. By default, this is the color applied to
the status bar (via statusBarColor) and navigation bar (via navigationBarColor). -->
<attr name="colorPrimaryDark" format="color" />
<!-- Bright complement to the primary branding color. By default, this is the color applied
to framework controls (via colorControlActivated). -->
<attr name="colorAccent" format="color" />
<!-- The color applied to framework controls in their normal state. -->
<attr name="colorControlNormal" format="color" />
<!-- The color applied to framework controls in their activated (ex. checked) state. -->
<attr name="colorControlActivated" format="color" />
<!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
<attr name="colorControlHighlight" format="color" />
<!-- The color applied to framework buttons in their normal state. -->
<attr name="colorButtonNormal" format="color" />
<!-- The color applied to framework switch thumbs in their normal state. -->
<attr name="colorSwitchThumbNormal" format="color" />
(От \sdk\extras\android\support\v7\appcompat\res\values \ attrs.xml)
Ответ 4
Попробуйте это,
Я использовал это, и он отлично работает с v21.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimaryDark">@color/blue</item>
</style>
Ответ 5
Спасибо за ответы выше, с помощью этих, после определенного R & D для приложения xamarin.android MVVMCross, ниже обработанного
Флаг, указанный для активности в методе OnCreate
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
Для каждой MvxActivity тема упоминается ниже
[Activity(
LaunchMode = LaunchMode.SingleTop,
ScreenOrientation = ScreenOrientation.Portrait,
Theme = "@style/Theme.Splash",
Name = "MyView"
)]
My SplashStyle.xml выглядит как ниже
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:statusBarColor">@color/app_red</item>
<item name="android:colorPrimaryDark">@color/app_red</item>
</style>
</resources>
И у меня есть V7 appcompact.
Ответ 6
применение
<item name="android:statusBarColor">@color/color_primary_dark</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
в Theme.AppCompat.Light.DarkActionBar
не работал для меня. Что сделал трюк, давая colorPrimaryDark
как обычно вместе с android:colorPrimary
в styles.xml
<item name="android:colorAccent">@color/color_primary</item>
<item name="android:colorPrimary">@color/color_primary</item>
<item name="android:colorPrimaryDark">@color/color_primary_dark</item>
и в установлении
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Window window = this.Window;
Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
}
не нужно было устанавливать цвет статуэтки в коде.