首页 > 解决方案 > 隐藏 xamarin.android 上的状态栏

问题描述

所以我觉得问这个有点愚蠢,但我现在真的很困惑。当视频全屏显示时,我需要隐藏状态栏,但我不断收到

CS0120 非静态字段、方法或属性“Activity.Window”需要对象引用

我尝试创建一个 Activity 类的实例,但会引发 NullReferenceException。

Activity.Window.ClearFlags(WindowManagerFlags.Fullscreen); //隐藏

那么如何使用这种方法仅在视频全屏时隐藏状态栏呢?

 public class MainActivity : AppCompatActivity, BottomNavigationView.IOnNavigationItemSelectedListener
{
    WebView web_view;
    
   

    public class HelloWebViewClient : WebViewClient
    {
        public override bool ShouldOverrideUrlLoading(WebView view, string url)
        {
            view.LoadUrl(url);
            return false;
        }
    }

  
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        SupportActionBar.Hide();
        SetContentView(Resource.Layout.activity_main);
        
        var relativeLayout = FindViewById<RelativeLayout>(Resource.Id.container);
        var relativeLayoutTwo = FindViewById<RelativeLayout>(Resource.Id.containerTwo);
        web_view = FindViewById<WebView>(Resource.Id.webview);
        web_view.Settings.JavaScriptEnabled = true;
        web_view.SetWebChromeClient(new FullScreenClient(relativeLayout, relativeLayoutTwo));
        



        BottomNavigationView navigation = FindViewById<BottomNavigationView>(Resource.Id.navigation);
        navigation.SetOnNavigationItemSelectedListener(this);
    }

    public class FullScreenClient : WebChromeClient
    {
        readonly FrameLayout.LayoutParams matchParentLayout = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent,
                                                                                                         ViewGroup.LayoutParams.MatchParent);
        readonly ViewGroup content;
        readonly ViewGroup parent;
        View customView;
       
        public FullScreenClient(ViewGroup parent, ViewGroup content)
        {
            this.parent = parent;
            this.content = content;
        }

        public override void OnShowCustomView(View view, ICustomViewCallback callback)
        {
            customView = view;
            view.LayoutParameters = matchParentLayout;
            parent.AddView(view);
            content.Visibility = ViewStates.Gone;
            **Activity.Window.ClearFlags(WindowManagerFlags.Fullscreen);**
        }

        public override void OnHideCustomView()
        {
            content.Visibility = ViewStates.Visible;
            parent.RemoveView(customView);
            customView = null;
            
        }
    }

标签: androidxamarinxamarin.android

解决方案


我想到了。我使用了 Xamarin.Essentials 命名空间,并在每个自定义方法中创建了一个 MainActivity 类实例并将其设置为等于 (MainActivity)Platform.CurrentActivity; 通过那个实例,我能够使用 Window.AddFlags(WindowManagerFlags.Fullscreen);

 MainActivity hideBar = new MainActivity();
            hideBar = (MainActivity)Platform.CurrentActivity;
            hideBar.Window.AddFlags(WindowManagerFlags.Fullscreen);

推荐阅读