Запретить полноэкранный выход (флажок окна снят?) При изменении ориентации - PullRequest
5 голосов
/ 26 мая 2020

У меня полноэкранный режим без configChanges, установленного в AndroidManifest. xml, поэтому система воссоздает действие при изменении ориентации. Здесь все работает нормально, за исключением того, что периодически изменение ориентации, кажется, заставляет приложение выйти из полноэкранного режима и вернуть системный интерфейс.

У меня есть код для повторного входа в полноэкранный режим, когда это происходит, но я ' Я бы хотел, чтобы он не выходил из полноэкранного режима для начала. Мне интересно, почему это может происходить?

Я также заметил, что это происходит только тогда, когда флаг debuggable установлен в false в build.gradle для конфигурации сборки (выпуск или отладка)

Activity.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // initial fullscreen mode before content loads
    enterFullscreenMode()

    window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
        if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
            // not full screen
            Handler().postDelayed({
                enterFullscreenMode()
            }, 800L)
        }
    }
}

private fun enterFullscreenMode() {
    window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                or View.SYSTEM_UI_FLAG_FULLSCREEN
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
}     

1 Ответ

0 голосов
/ 09 июня 2020
Обработка пользовательского интерфейса системы

Android довольно сложна. Я предлагаю вам скопировать эти файлы в свое приложение: https://gist.github.com/chrisbanes/73de18faffca571f7292

Затем в вашей активности:


class MyActivity : AppCompatActivity {

    /** System UI helper used to hide the navigation bar. */
    private lateinit var systemUiHelper: SystemUiHelper

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Keep full screen on.
        window?.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
        systemUiHelper = SystemUiHelper(this, SystemUiHelper.LEVEL_IMMERSIVE, SystemUiHelper.FLAG_IMMERSIVE_STICKY)
    }

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        if (hasFocus) {
            systemUiHelper.hide()
        }
    }

}

Я сделал это в своем приложении, и все работает отлично . Я перестал пытаться разбираться с флагами вручную.

...