2014-04-13 7 views
4

적절한 경우 앱을 몰입 형으로 설정하고 API가 너무 낮은 경우 일부 기능을 모방하려고합니다. 이것이 적절한 방법일까요? 더 효율적인 방법이 있습니까?Android 무단 사용 모드 및 이전 버전과의 호환성

private boolean apiTooLowForImmersive = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT){ 

     apiTooLowForImmersive = true; 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
    setContentView(R.layout.activity_menu); 
} 

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if (hasFocus && !apiTooLowForImmersive) { 
     getWindow().getDecorView() 
      .setSystemUiVisibility(
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
          | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
          | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
          | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
          | View.SYSTEM_UI_FLAG_FULLSCREEN 
          | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
      );} 
} 

답변

2

아니, apiTooLowForImmersivestaticpublic

public static boolean apiTooLowForImmersive = false; 

그것을 할 (또는 아니라, 그것의 난 내 응용 프로그램에서 사용하는 것과 동일한 시스템) 그냥 참고

을 만들 수있는 가장 좋은 방법입니다 static 블록에서 값을 제공하십시오.

static { 
     apiTooLowForImmersive = 
       (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT); 
} 

이렇게하면 모든 클래스에서 사용할 수 있으며 사용하기에 안전한 코드를 알아야 할 때마다이 필드를 사용할 수 있습니다.

+0

왜 정적 블록을 사용합니까? 왜 그것을 창조 초기에 초기화하지 않습니까? 'public static boolean apiTLFI = (SDK_INT BrassApparatus

+1

SuppressWarning ("NewApi")를 추가하십시오; 지원되지 않는 무언가를 사용하면 경고 메시지가 표시됩니다 (그러나이 경우 이미 처리 했으므로 경고가 필요하지 않습니다). 그렇다면 그렇게 할 수 있습니다. 나야. –

+0

'@TargetApi()'를 우연히 발견했습니다. 차이점이 뭐야? 엄청 고마워! – BrassApparatus