我希望我的应用程序在适当的时候是沉浸式的,并在 api 太低时模仿一些功能。这是一个合适的方法吗?有没有更有效的方法?

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
            );}
}

最佳答案

不,这是最好的方法(或者,它与我在应用程序中使用的系统相同)

只是一个注释,使 apiTooLowForImmersive staticpublic

public static boolean apiTooLowForImmersive = false;

并在 static 块中为其赋值。
static {
       apiTooLowForImmersive =
               (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT);
}

有了这个,您可以在每个类中以及每次需要知道哪些代码可以安全使用时使用此字段。

关于Android 沉浸式模式和向后兼容性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23047637/

10-12 06:30