Android,GL,IMMERSIVE MODE中的屏幕尺寸

Max*_*Max 5 android opengl-es android-gui android-4.4-kitkat

我正在使用Nexus 4 KitKat 4.4开发并尝试添加IMMERSIVE MODE到我的游戏中.我需要glViewport正确设置屏幕高度.

以前我用过

@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public static int getScreenHeight() {
    if (Main.m_activity == null)
        return -1;
    Display display = Main.m_activity.getWindowManager()
            .getDefaultDisplay();
    int height = -1;

    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){
        //width = display.getWidth(); // deprecated
        height = display.getHeight(); // deprecated
    }else{
        Point size = new Point();
        display.getSize(size);
        height = size.y;
    }
    return height;

}
Run Code Online (Sandbox Code Playgroud)

它不会返回屏幕的真实高度IMMERSIVE MODE.

所以我开始使用来自的值

private static class Renderer implements GLSurfaceView.Renderer {
    public void onSurfaceChanged(GL10 gl, int width, int height) {
Run Code Online (Sandbox Code Playgroud)

应用程序启动时它工作正常.如果我按下主页按钮并返回主屏幕,然后返回游戏onSurfaceChanged再次调用,但使用旧的错误值(非沉浸式模式屏幕尺寸,更小,常规)

IMMERSIVE SCREEN尺寸为800x1280,常规尺寸为800x1184

当我获得常规尺寸并将其设置为时,glViewport我会在屏幕顶部显示黑线.

PSIMMERSIVE MODE按下音量按钮时也丢失了.

PS2

我有以下方法impl.它无助于处理屏幕/窗口调整大小.

@Override
public void onWindowFocusChanged(boolean hasFocus) {
Run Code Online (Sandbox Code Playgroud)

Tem*_*ema 4

好文章,但还不够。 http://developer.android.com/training/system-ui/immersive.html

现在我们得到屏幕尺寸

public void onSurfaceChanged(GL10 gl, int width, int height) {
Run Code Online (Sandbox Code Playgroud)

如果高度降低,我们会再次启用沉浸式模式,延迟 1 秒。这可行,但很老套,我自己寻找规范的解决方案。

恐怕这只是 KitKat 中的 bug。我不知道任何实施沉浸式模式的著名游戏。(当然我们的应用程序除外)))