Android中的半透明状态栏,带有Xamarin

时间:2017-05-22 12:05:09

标签: android xamarin xamarin.android xamarin.forms

我正在使用Xamarin,我想在我的应用程序中使用透明状态栏。我已经在这里和Xamarin论坛上阅读了很多其他主题但是没有帮助我。问题是代替透明状态栏我得到了灰色状态栏。

以下是我的源代码:MainActivity.cs

    protected override void OnCreate(Bundle bundle)
    {

        base.OnCreate(bundle);

        global::Xamarin.Forms.Forms.Init(this, bundle);
        LoadApplication(new App());


        var uiOptions = (int)Window.DecorView.SystemUiVisibility;
        uiOptions |= (int)SystemUiFlags.LayoutStable;
        uiOptions |= (int)SystemUiFlags.LayoutFullscreen;
        Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;

        Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
        Window.SetStatusBarColor(Color.Transparent)  
    }

如果尝试在styles.xml中为主题设置不同的属性,但没有任何帮助。目前styles.xml是:

  <style name="MainTheme" parent="MainTheme.Base">
  </style>

  <style name="MainTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">

    <item name="windowNoTitle">true</item> 
    <item name="colorPrimary">#2196F3</item> 
    <item name="colorAccent">#FF4081</item>
    <item name="windowActionModeOverlay">true</item>
    <item name="android:datePickerDialogTheme">@style/AppCompatDialogStyle</item>
  </style>

我在Android 5.1(棒棒糖)上进行测试,因此应支持透明状态栏。我甚至编写了简单的原生Android应用程序来测试我的手机是否支持透明。我开始使用空白活动的应用程序,设置活动的背景图像(检查状态栏是否透明)和我写的MainActivity.java:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
    }

我有透明状态栏。但是,当我从Xamarin那里做同样的事情时,它无法正常工作。

2 个答案:

答案 0 :(得分:0)

您可以尝试将以下内容添加到values-v21文件夹中的styles.xml中。

<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

啊,没看到你已经通过代码尝试过了。

答案 1 :(得分:0)

使用下面提到的代码。这对我来说非常适合Xamarin表格。

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