2014-04-13 174 views
4

我希望我的應用程序能夠在適當的時候沉浸其中,並在api太低時模仿某些功能。這是一個適當的方式來做到這一點?有沒有更高效的方法?Android Immersive模式和向後兼容性

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