Android主题不会更新状态栏颜色

时间:2016-01-18 16:00:00

标签: android xamarin android-appcompat material

我很难让Android更新我的状态栏颜色。我在Xamarin.Android中使用AppCompatActivity

我的values/styles.xml文件是这样的:

<!-- Main theme -->
<style name="MainTheme" parent="MainTheme.Base">
</style>
<style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowNoTitle">true</item>
  <item name="windowActionBar">false</item>
  <item name="android:windowBackground">@color/WindowBackground</item>
  <item name="colorPrimary">@color/Primary</item>
  <item name="colorPrimaryDark">@color/PrimaryDark</item>
  <item name="colorAccent">@color/Accent</item>
  <item name="android:textColorPrimary">@color/PrimaryText</item>
  <item name="android:textColorSecondary">@color/SecondaryText</item>
</style>

values-v21/styles.xml内,我有以下内容:

<!-- Main theme -->
<style name="MainTheme" parent="MainTheme.Base">
  <item name="android:windowTranslucentStatus">false</item>
  <item name="android:windowDrawsSystemBarBackgrounds">true</item>
  <item name="android:statusBarColor">@color/PrimaryDark</item>
</style>

但是,状态栏不会更新。但是,如果我使用它,从OnCreate(),颜色更新就好了:

protected virtual void SetupStatusBar()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.Lollipop)
        return;

    Window.ClearFlags(WindowManagerFlags.TranslucentStatus);

    Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);

#pragma warning disable 618
    Window.SetStatusBarColor(Resources.GetColor(Resource.Color.PrimaryDark));
#pragma warning restore 618
}

我有点困惑,因为我所做的就是复制XML指令。

我正在使用运行Android 5.1.1的Galaxy Tab S2,即API 22,并且应该触发v21样式覆盖,我想。

1 个答案:

答案 0 :(得分:1)

我找到了。您对API 22主题的覆盖期望不会以这种方式实现。

  

我假设你在你的清单中宣称app主题为   MainTheme

在你的值-v21中。所以你的代码就像这样

<!-- Main theme -->
<style name="MainTheme>" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="android:windowTranslucentStatus">false</item>
  <item name="android:windowDrawsSystemBarBackgrounds">true</item>
  <item name="android:statusBarColor">@color/PrimaryDark</item>
</style>

或以你的方式:

<style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="android:windowTranslucentStatus">false</item>
  <item name="android:windowDrawsSystemBarBackgrounds">true</item>
  <item name="android:statusBarColor">@color/PrimaryDark</item>
</style>
<style name="MainTheme" parent="MainTheme.Base">
</style>

所以现在android会引用MainTheme中的样式,并且会替换重复的属性(如果有的话),优先考虑值为21 xml。