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

时间:2013-12-12 21:54:55

标签: android opengl-es android-4.4-kitkat android-gui

我正在使用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再次调用,但使用旧的错误值(非沉浸式模式屏幕尺寸,更小,更常规)

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

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

PS 按下音量按钮时,IMMERSIVE MODE也会丢失。

PS2

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

@Override
public void onWindowFocusChanged(boolean hasFocus) {

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

现在我们通过

获得屏幕尺寸
public void onSurfaceChanged(GL10 gl, int width, int height) {

如果高度降低,那么我们再次启用沉浸式模式,延迟时间为1秒。 这很有效,但我自己也在寻找规范的解决方案。

我担心它只是KitKat中的错误。 我没有实现沉浸式模式的任何着名标题。 (当然,除了我们的应用程序)))

答案 2 :(得分:4)

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