Изменение цвета строки состояния с помощью AppCompat ActionBarActivity
в моем одном действии я меняю цвет панели инструментов с помощью Palette но на 5.0 устройств с помощью ActionBarActivity the status bar цвет-это цвет моей colorPrimaryDark в моей теме деятельности, поэтому у меня есть 2 очень разных цвета, и это не выглядит хорошо.
Я понимаю, что в 5.0 вы можете использовать Window.setStatusBarColor() но ActionBarActivity не имеют.
так что мой вопрос в 5.0 как изменить цвет строки состояния с ActionBarActivity?
6 ответов:
Я не уверен, что понимаю проблему.
Я вы хотите изменить цвет строки состояния программно (и при условии, что устройство имеет 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>
существуют различные способы изменения цвета строки состояния.
1) использование стилей.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 оттенок основного цвета, который я использую в своем приложении. Вы можете определить этот цвет в цветах.XML-файл.
дайте ему попробовать и дайте мне знать, если у вас есть какие-либо вопросы. Надеюсь, это поможет.
Я не думаю, что цвет строки состояния был реализован в 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" />(от \СДК\массовки\андроид\поддержка\В7\совместимости приложений\Рес\ценности\у attrs.xml)
попробуйте это, Я использовал это, и это очень хорошо работает с v21.
<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimaryDark">@color/blue</item> </style>
применение
<item name="android:statusBarColor">@color/color_primary_dark</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item>на
Theme.AppCompat.Light.DarkActionBarне работал для меня. В чем же тут хитрость, отдаваяcolorPrimaryDarkкак обычно вместе сandroid:colorPrimaryв стилях.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); }не пришлось устанавливать цвет строки состояния в коде .
Спасибо за ответы выше, с помощью тех, после определенных исследований и разработок для 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" )]Мой Стиль Брызг.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 referred.
Comments