Изменение цвета строки состояния с помощью AppCompat ActionBarActivity - программирование
Подтвердить что ты не робот

Изменение цвета строки состояния с помощью AppCompat ActionBarActivity

В одном из моих занятий я изменил цвет панели инструментов, используя Palette. Но на устройствах 5.0, использующих ActionBarActivity, цвет status bar - это цвет моего colorPrimaryDark в моей теме активности, поэтому у меня есть 2 очень разных цвета, и он не выглядит хорошо.

Я понимаю, что в 5.0 вы можете использовать Window.setStatusBarColor(), но у ActionBarActivity этого нет.

так что мой вопрос в 5.0, как я могу изменить цвет строки состояния с помощью ActionBarActivity?

4b9b3361

Ответ 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);
                }

не нужно было устанавливать цвет статуэтки в коде.