2013-12-12 2 views
5

Nexus 4 KitKat 4.4 및 으로 개발 중이며 IMMERSIVE MODE을 내 게임에 추가하려고합니다. glViewport을 올바르게 설정하려면 화면 높이가 필요합니다. Android, GL, 화면 크기가 IMERERAVE MODE

는 이전에 나는 그것은 IMMERSIVE MODE에서 화면의 실제 높이를 반환하지 않습니다

@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

나는 방법 IMPL을 다음했다. 그것은 화면/창 크기 조정을 처리하는 데 도움이되지 않습니다.

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
+0

@payeli 태그가 불필요하게 "개선"되지 않도록하십시오. 우리는 이미 kitkat을위한 * 두 개의 태그를 가지고 있습니다. 우리는 세번째 태그가 필요하지 않았습니다. – Charles

답변

3

좋은 기사이지만 여전히 충분하지 않습니다. http://developer.android.com/training/system-ui/immersive.html

는 지금 우리가

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

와 화면 크기를 얻을 수와 높이가 다음 감소하면 우리는 일초 지연 다시 몰입 모드를 가능하게한다. 이것은 작동하지만 hacky와 나는 정식 해결책을 찾는다.

KitKat에서 버그가있는 것 같습니다. 몰입 형 모드를 구현 한 유명한 제목이 없습니다. (당연히 앱 제외))

+0

일반적으로 그러한 지연된 전화가 마음에 들지 않습니다. – Max

4

Display.getRealSize을 사용하면 시스템 창없이 화면 경계를 반환 할 수 있습니다.

+0

그런 식으로하면 볼륨 버튼을 누르면 immersive 모드가 손실됩니다. Display.getRealSize는 여전히 화면 크기를 제공합니다. – Max

3

몰입 형 모드를 사용 중지/사용 설정하면 View.OnSystemUiVisibilityChangeListener을 사용하여 콜백을받을 수 있습니다. 이것을 사용하여 실제 화면 높이를 파악할 수 있습니다.

+0

사용자가 하드웨어 버튼으로 기기 볼륨을 변경하면 대화 상자가 앱 위에 표시 될 때 작동합니까? 내 테스트에서 몰입 형 앱을 연 후 사용자가 하드웨어 버튼을 사용하여 볼륨을 변경하면 앱의 가시성이 변경되지 않습니다. – mmathieum

관련 문제