Xamarin表示Android透明状态栏

时间:2017-05-05 07:01:41

标签: android xamarin xamarin.android xamarin.forms

我创建了一个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颜色,我会得到一个灰色状态栏。可能是什么解决方案?

4 个答案:

答案 0 :(得分:4)

你试过这个吗?

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

答案 1 :(得分:1)

您可以尝试将其添加到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>

看起来像这样:-

enter image description here

答案 2 :(得分:0)

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

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());
    }
}

答案 3 :(得分:0)

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

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);

    }

}
相关问题