首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity如何在安卓设备上禁用全屏(S8)

Unity如何在安卓设备上禁用全屏(S8)
EN

Stack Overflow用户
提问于 2017-11-02 18:04:56
回答 1查看 4.8K关注 0票数 0

如果我构建我的应用程序并在我的三星Galaxy S8上播放它,它总是处于全屏模式。我甚至无法禁用它的vis设置。

我试过使用代码"Screen.fullScreen = false;“,但它不起作用。在我的播放器设置中,宽高比是自定义的(16.9)。

你知道怎么解决这个问题吗?我不想让它全屏显示。

EN

回答 1

Stack Overflow用户

发布于 2017-11-02 20:12:27

这在过去很容易做到,只需创建新的UnityPlayer子类并将setFullscreen(true);修改为setFullscreen(false);,但Unity API和安卓版本已经发生了很大变化,这不再那么容易了。

你必须从C# com.unity3d.player.UnityPlayer获取当前的Unity activity,从中获取安卓的WindowManager,然后清除FLAG_FULLSCREEN标志。

This person已经这样做了,下面是他/她的代码:

代码语言:javascript
复制
public static void SetupAndroidTheme(int primaryARGB, int darkARGB, string label = null)
{
    #if UNITY_ANDROID && !UNITY_EDITOR
    label = label ?? Application.productName;
    Screen.fullScreen = false;
    AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
    activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
    {
        AndroidJavaClass layoutParamsClass = new AndroidJavaClass("android.view.WindowManager$LayoutParams");
        int flagFullscreen = layoutParamsClass.GetStatic<int>("FLAG_FULLSCREEN");
        int flagNotFullscreen = layoutParamsClass.GetStatic<int>("FLAG_FORCE_NOT_FULLSCREEN");
        int flagDrawsSystemBarBackgrounds = layoutParamsClass.GetStatic<int>("FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS");
        AndroidJavaObject windowObject = activity.Call<AndroidJavaObject>("getWindow");
        windowObject.Call("clearFlags", flagFullscreen);
        windowObject.Call("addFlags", flagNotFullscreen);
        windowObject.Call("addFlags", flagDrawsSystemBarBackgrounds);
        int sdkInt = new AndroidJavaClass("android.os.Build$VERSION").GetStatic<int>("SDK_INT");
        int lollipop = 21;
        if (sdkInt > lollipop)
        {
            windowObject.Call("setStatusBarColor", darkARGB);
            string myName = activity.Call<string>("getPackageName");
            AndroidJavaObject packageManager = activity.Call<AndroidJavaObject>("getPackageManager");
            AndroidJavaObject drawable = packageManager.Call<AndroidJavaObject>("getApplicationIcon", myName);
            AndroidJavaObject taskDescription = new AndroidJavaObject("android.app.ActivityManager$TaskDescription", label, drawable.Call<AndroidJavaObject>("getBitmap"), primaryARGB);
            activity.Call("setTaskDescription", taskDescription);
        }
    }));
    #endif
}

public static int ToARGB(Color color)
{
    Color32 c = (Color32)color;
    byte[] b = new byte[] { c.b, c.g, c.r, c.a };
    return System.BitConverter.ToInt32(b, 0);
}

示例调用:

代码语言:javascript
复制
SetupAndroidTheme(ToARGB(Color.black), ToARGB(Color.black));

没有在三星Galaxy S8上测试,但它在我的安卓设备上可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47072490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档