【问题标题】:Xamarin Forms Android transparent status barXamarin Forms Android 透明状态栏
【发布时间】:2017-05-05 07:01:41
【问题描述】:

我创建了一个 Xamarin Forms 项目,但无法将我的 Android 状态栏颜色更改为透明。我在 MainActivity 的 OnCreate() 方法中以编程方式更改颜色,如下所示:

  if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
        {
            Window.ClearFlags(WindowManagerFlags.TranslucentStatus);
            Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
            Window.SetStatusBarColor(Color.Transparent);
        }

我尝试了不同的颜色,效果很好,但“透明”根本不起作用。我正在测试 API 22。

我的 style.xml 如下:

  <style name="MainTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/blue</item>
    <item name="colorPrimaryDark">@color/blue</item>
    <item name="colorAccent">#FF4081</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>

例如,如果我以编程方式将我的颜色设置为紫色,它将毫无问题地工作,但如果我将其设置为透明,我将获得我的 style.xml 颜色,即蓝色。如果我删除我的 style.xml ColorPrimaryDark 颜色,我会得到一个灰色的状态栏。有什么解决办法?

【问题讨论】:

标签: android xamarin xamarin.android xamarin.forms


【解决方案1】:

你试过了吗?

<item name="android:windowTranslucentStatus">true</item>

【讨论】:

    【解决方案2】:

    您可以尝试在 styles.xml (Android proj) 中添加它

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

    看起来像这样:-

    【讨论】:

      【解决方案3】:

      要实现这一点,请将该代码放在 Xamarin.Android 项目的 MainActivity 类的 OnCreate() 方法中的 LoadApplication(new App()) 之前。

      private void TransparentStatusBar()
      {
          if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
          {
              // for covering the full screen in android..
              Window.SetFlags(WindowManagerFlags.LayoutNoLimits, WindowManagerFlags.LayoutNoLimits);
      
              // clear FLAG_TRANSLUCENT_STATUS flag:
              Window.ClearFlags(WindowManagerFlags.TranslucentStatus);
      
              // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
              Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
      
              Window.DecorView.SystemUiVisibility = 0;
      
              Window.SetStatusBarColor(Android.Graphics.Color.Transparent);
      
          }
      
      }
      

      【讨论】:

        【解决方案4】:

        使用下面提到的代码。这对我来说非常有效。

        public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
        {
            protected override void OnCreate(Bundle bundle)
            {
                TabLayoutResource = Resource.Layout.Tabbar;
                ToolbarResource = Resource.Layout.Toolbar;
        
                base.OnCreate(bundle);
        
                global::Xamarin.Forms.Forms.Init(this, bundle);
        
                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    Window.DecorView.SystemUiVisibility = 0;
                    var statusBarHeightInfo = typeof(FormsAppCompatActivity).GetField("_statusBarHeight", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                    statusBarHeightInfo.SetValue(this, 0);
                    Window.SetStatusBarColor(new Android.Graphics.Color(18, 52, 86, 255));
                }
        
                LoadApplication(new App());
            }
        }
        

        【讨论】:

        • 请注意,statusBarHeightInfo 在当前 xamarin.forms 上将为空
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-07
        • 1970-01-01
        相关资源
        最近更新 更多