it-swarm.com.ru

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

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

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

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

126
tyczj

Я не уверен, что понимаю проблему.

Если вы хотите изменить цвет строки состояния программным образом (и при условии, что на устройстве установлен 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>
357
matiash

Существуют различные способы изменения цвета строки состояния.

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.

Попробуйте и дайте мне знать, если у вас есть какие-либо вопросы. Надеюсь, поможет.

50
Aritra Roy

Я не думаю, что цвет строки состояния был реализован в 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 )

8
JstnPwll

Попробуйте, Я использовал это, и он очень хорошо работает с v21.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimaryDark">@color/blue</item>
</style>
3
Manoj Kumar

Применение 

    <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);
                }

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

1
Annu

Спасибо за ответы выше, с помощью тех, после определенных 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"
    )]

Мой 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 указано. 

0
Pallavi