5

我正在使用 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;

}

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

所以我开始使用来自

private static class Renderer implements GLSurfaceView.Renderer {
    public void onSurfaceChanged(GL10 gl, int width, int height) {

并且在应用程序启动时运行良好。如果我按下主屏幕按钮并返回主屏幕然后返回游戏onSurfaceChanged再次调用但旧的错误值(非沉浸式模式屏幕尺寸,更小,常规)

沉浸式屏幕尺寸为 800x1280 常规尺寸为 800x1184

当我获得常规尺寸并将其设置时,glViewport我会在屏幕顶部看到黑线。

PSIMMERSIVE MODE当我按下音量按钮时也会丢失。

PS2

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

@Override
public void onWindowFocusChanged(boolean hasFocus) {
4

3 回答 3

4

使用Display.getRealSize返回没有系统窗口的屏幕边界。

于 2013-12-17T15:47:53.093 回答
4

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

现在我们得到屏幕尺寸

public void onSurfaceChanged(GL10 gl, int width, int height) {

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

恐怕它只是 KitKat 的错误。我没有任何实现沉浸式模式的著名游戏。(当然除了我们的应用程序)))

于 2013-12-22T22:50:08.380 回答
4

您可以使用View.OnSystemUiVisibilityChangeListener在禁用/启用沉浸式模式时获取回调。使用它,您可以计算出屏幕的实际高度。

于 2013-12-29T10:14:19.127 回答