0

I want to change the color of status bar when api level is 21 and higher. It's not working for me. I'm also using supportActionBar. I'm using the codes below:

values/styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    !-- All customizations that are NOT specific to a particular API-level can go here. -->
    <item name="windowNoTitle">true</item>
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/primary</item>
    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <!-- colorAccent is used as the default value for colorControlActivated
         which is used to tint widgets -->
    <item name="colorAccent">@color/accent</item>
    <!-- You can also set colorControlNormal, colorControlActivated
         colorControlHighlight and colorSwitchThumbNormal. -->
     <item name="android:textColorPrimary">@color/primary_text</item>
     <item name="android:textColorSecondary">@color/secondary_text</item>

  </style>

  <!-- Application theme. -->
  <style name="MyTheme" parent="MyTheme.Base">
  </style>

  <style name="MyTheme.ToolBar" parent="MyTheme.Base">
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
  </style>

  <style name="MyTheme.NavMenu" parent="MyTheme.Base">
    <item name="android:textColorPrimary">@color/gray</item>
  </style>

  <style name="MyTheme.RightMenu" parent="MyTheme.Base">
    <item name="android:textColorPrimary">@color/black</item>
  </style>
</resources>

In manifest file I set android:theme="@style/MyTheme"

values-v21/styles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyTheme" parent="MyTheme.Base">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/primary_dark</item>
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
        <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
        <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
    </style>
</resources>

This is my colors file:

<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FFC107</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#727272</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#B6B6B6</color>
</resources>

What's wrong with my styles and why isn't it changing status bar color??

Vahid Amiri
  • 10,522
  • 12
  • 59
  • 102

4 Answers4

1

Status bar color can be set by colorPrimaryDark,

In your values-v21/styles.xml add

<resources>
<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:colorPrimaryDark">@color/colorPrimary</item>
<item name="android:colorPrimaryDark">@color/colorPrimayDark</item>
</style></resources>

and YourActivity extends AppCompatActivity

1

As I'm using Xamarin adding these lines in the base activity solved the problem:

Window window = this.Window;
window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);

For Java refer to this question on SO.

Community
  • 1
  • 1
Vahid Amiri
  • 10,522
  • 12
  • 59
  • 102
0

Change your

<style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">

to

<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>
Stanojkovic
  • 1,576
  • 1
  • 16
  • 21
0

Status bar color is drawn from the colorPrimaryDark color value for your App Style. Just change it to whatever color you want the actionbar to be, it'll get changed.

styles.sml

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <!--This is your default actionbar color-->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    </style>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--change this to whatever you need-->
    <color name="colorPrimary">#03A9F4</color>
    <color name="colorPrimaryDark">#0277BD</color
</resources>
TeChNo_DeViL
  • 709
  • 5
  • 11