У меня есть приложение, в котором определенные представления должны быть полноэкранными, а другие не должны быть полноэкранными. В некоторых случаях я хочу, чтобы фон отображался под строкой состояния, поэтому я использую его при загрузке представления, чтобы сделать действие полноэкранным:
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
window.statusBarColor = Color.TRANSPARENT
, а затем в других представлениях у меня есть это, чтобы переключиться обратно на не полноэкранный режим и показать строку состояния сплошным цветом, поэтому я использую это, когда эти представления загружаются:
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
window.statusBarColor = ContextCompat.getColor(context, R.color.colorPrimaryDark)
Однако, когда я переключаюсь между этими представлениями, весь вид будет смещен на размер строки состояния, при переходе от полноэкранного к не полноэкранному режиму весь вид слишком низок и опускается ниже навигационной панели, переход в другую сторону приводит к полному вид слишком высокий и оставляет немного пустого пространства между панелью навигации и нижней частью вида.
Я попытался вызвать invalidate()
после установки флагов, чтобы заставить его перерисовать, но, похоже, он ничего не делает. Есть ли еще один вызов, который я могу сделать, чтобы исправить смещение, вызванное изменением флагов окна?
РЕДАКТИРОВАТЬ:
Чтобы дать больше информации - я не переключаюсь между действиями, я просто переключаюсь, какой вид отображается в действии. Когда мой вид прикреплен, я вызываю флаги decorView