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



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



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



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

453   6  

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

    Ничего не найдено.