无法更改状态栏

时间:2016-10-03 21:39:19

标签: android xamarin material-design appcompat-v7-r23

我正在尝试将我的应用设为主题,以遵循Android的外观。我的项目是一个针对API 23的Xamarin.Android项目,但最低API目标是16.所以我必须使用AppCompat库在所有API上使用相同的设计。

我已按照以下指南操作:Material ThemeBeautiful Material Design with the Android Support Design LibraryAndroid Tips: Hello AppCompatActivity, Goodbye ActionBarActivity并创建了以下文件:

  • 资源/值/ styles.xml:

    <resources>
      <style name="MyTheme" parent="MyTheme.Base">
      </style>
      <style name="MyTheme.Base" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#F44336</item>
        <item name="colorPrimaryDark">#D32F2F</item>
      <item name="colorAccent">#FF4081</item>
      </style>
    </resources>
    
  • 资源/值-V21 / styles.xml

     <resources>
     <!--
        Base application theme for API 21+. This theme replaces
        MyTheme from resources/values/styles.xml on API 21+ devices.
     -->
    <style name="MyTheme" parent="MyTheme.Base">
      <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>
    
  • MainActivity.cs

    using Android.App;
    using Android.Widget;
    using Android.OS;
    using Android.Support.V7.App;
    
    namespace TestThemeApp
    {
        [Activity(Label = "TestThemeApp", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/MyTheme")]
        public class MainActivity : AppCompatActivity
        {
            protected override void OnCreate(Bundle bundle)
            {
                base.OnCreate(bundle);
    
                // Set our view from the "main" layout resource
                SetContentView (Resource.Layout.Main);
            }
        }
    }
    

我只是想让工具栏变红,状态栏变为深红色,但状态栏颜色不会改变。这就是它的样子:

Status bar won't change

我做错了什么?

5 个答案:

答案 0 :(得分:0)

在你的风格中尝试这个(Resources / values-v21 / styles.xml)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
> 
<item name="android:statusBarColor">@color/cobalt_light</item>

我个人更喜欢在活动的onCreate方法中处理它:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(getResources().getColor(R.color.gray_very_dark));
    window.setNavigationBarColor(getResources().getColor(R.color.gray_darker));
}

答案 1 :(得分:0)

对于简单的解决方法,您可以将主要颜色更改为状态栏的所需颜色,它会自动更改状态栏的颜色。

注意:这是一个解决方法,直到找到正确的答案。

答案 2 :(得分:0)

您必须在MainActivity顶部添加一个标记,并在结尾处设置条形颜色。

public class MainActivity : AppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        // First check if the current SDK is >= 21. Else it will cause trouble
        if ((int)Build.VERSION.SdkInt >= 21)
            Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);

        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView (Resource.Layout.Main);

        SetBarColor();
    }

    public void SetBarColor ()
    {
        if((int)Build.VERSION.SdkInt >= 21)
            Window.SetStatusBarColor(Color.ParseColor("#FF0000"));
    }
}

答案 3 :(得分:0)

使用下面的代码段来更改状态栏颜色:

<p:commandButton process="@this" action="http://..."  value="Test" />

答案 4 :(得分:-1)

我认为我已根据其他答案找到了最优雅的解决方案:

我唯一改变的是在OnCreate(Bundle bundle)函数中添加了标志:

 protected override void OnCreate(Bundle bundle)
 {
       if ((int)Build.VERSION.SdkInt >= (int)BuildVersionCodes.Lollipop)
                Window.AddFlags(Android.Views.WindowManagerFlags.DrawsSystemBarBackgrounds);

       base.OnCreate(bundle);

       // Set our view from the "main" layout resource
       SetContentView (Resource.Layout.Main);
 }  

就是这样!样式文件完成其余的工作,在较旧版本的android上,状态栏不会改变。