2014-04-13 116 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