我正在使用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) {
答案 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来获取回调。使用它,您可以计算出屏幕的实际高度。