安卓系统下,如何在沉浸模式下获取屏幕大小。GL。

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;

}

在“沉浸模式”下,它不能返回屏幕的实际高度。

因此,我开始使用以下数值:

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

当应用程序启动时,一切都正常。如果我按下主页按钮并返回到主屏幕,然后再返回游戏,onSurfaceChanged会再次被调用,但是使用旧的错误值(非沉浸模式屏幕大小,更小,常规大小)。

沉浸式屏幕大小为800x1280 常规大小为800x1184

当我获取常规大小并将其设置在glViewport中时,屏幕顶部会出现黑线。

PS 当我按音量按钮时,也会丢失IMMERSIVE MODE

PS2

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

@Override
public void onWindowFocusChanged(boolean hasFocus) {

@payeli,请不要无谓地“改进”标签。我们已经有了两个kitkat标签,我们不需要第三个。 - Charles
3个回答

4
很好的文章,但还不够。 http://developer.android.com/training/system-ui/immersive.html 现在我们使用以下方式获取屏幕大小:
public void onSurfaceChanged(GL10 gl, int width, int height) {

如果高度减小,则我们会在1秒延迟后再次启用沉浸式模式。这个方法可行,但有些hacky,我正在寻找官方解决方案。
我担心在KitKat版本中存在一些错误。除了我们的应用程序外,我不知道还有哪些著名的标题实现了沉浸式模式。)))

我一般不喜欢这种延迟调用。 - Max

4

当用户使用硬件按钮更改设备音量并且对话框出现在应用程序上方时,它是否有效?在我的测试中,如果用户在打开沉浸式应用程序后的第一件事是使用硬件按钮更改音量,则应用程序的可见性不会改变。 - mmathieum

4

如果我这样做,那么当我按音量按钮时,沉浸模式就会丢失。Display.getRealSize仍将给出屏幕尺寸。 - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接