我很难让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
样式覆盖,我想。
答案 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。