Режим погружения Android и обратная совместимость
-
21-12-2019 - |
Вопрос
Я хочу, чтобы мое приложение было иммерсивным, когда это необходимо, и имитировало некоторые функции, когда 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
static
и public
public static boolean apiTooLowForImmersive = false;
и присвоить ему значение в static
блокировать.
static {
apiTooLowForImmersive =
(Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT);
}
Благодаря этому вы можете использовать это поле в каждом классе и каждый раз, когда вам нужно знать, какой код безопасно использовать.
Не связан с StackOverflow