Unity Android 显示导航栏和状态栏

Unity显示导航栏比较麻烦,显示状态栏挺简单的,网上百度有很多方案。

主要实现方案是Github上的一个工程https://github.com/Over17/UnityShowAndroidStatusBar

这个工程有aar包,也可以直接使用,但是我比较反感就是修改xml启动Activity的方案的,所以想直接在Unity用反射实现。

他的安卓工程可以看看,只有三个函数。

 public void ShowStatusBar()
    {
        currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
        {
            AndroidJavaObject window = currentActivity.Call<AndroidJavaObject>("getWindow");
            
            window.Call("clearFlags", 1024);
            AndroidJavaObject decorView = window.Call<AndroidJavaObject>("getDecorView");
            int i = decorView.Call<int>("getSystemUiVisibility");
            decorView.Call("setSystemUiVisibility", i & ~GetFlag());
            window.Dispose();
            decorView.Dispose();
        }
        ));
    }

    private int GetFlag()
    {
        int m = 4096 | 256 | 1024 | 512 | 2 | 4;
        return m;
    }

这个是显示的代码,但是只这样写会有问题,就是显示之后会自动隐藏,所以还需要一个监听。

   private void AddListener(OnSystemUiVisibilityChangeListener OnSystemUicallback)
    {
        currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
        {
            AndroidJavaObject window = currentActivity.Call<AndroidJavaObject>("getWindow");
            AndroidJavaObject decorView = window.Call<AndroidJavaObject>("getDecorView");
            decorView.Call("setOnSystemUiVisibilityChangeListener", OnSystemUicallback);
        }
        ));
    }


public class OnSystemUiVisibilityChangeListener : AndroidJavaProxy
{
    public XFRecorder xf;
    public OnSystemUiVisibilityChangeListener(string packetname, XFRecorder xf) : base(packetname)
    {
        this.xf = xf;
    }

    private void onSystemUiVisibilityChange(int var1)
    {
        xf.ShowStatusBar();
    }
}

这是监听代码,在回调中调用显示代码

这样做有一个问题,就是启动的时候,导航栏会有一点闪烁感

发布了31 篇原创文章 · 获赞 2 · 访问量 2773

猜你喜欢

转载自blog.csdn.net/BDDNH/article/details/103497066