gpt4 book ai didi

android - 防止在方向更改时全屏退出(窗口标志清除?)

转载 作者:行者123 更新时间:2023-12-02 12:03:01 28 4
gpt4 key购买 nike

我有一个全屏 Activity ,没有在 AndroidManifest.xml 中设置 configChanges,以便系统在方向更改时重新创建 Activity 。这里一切正常,除了间歇性地改变方向似乎会导致应用程序退出全屏模式并重新进入系统 ui。

发生这种情况时,我有重新进入全屏的代码,但我想防止它从全屏开始。我想知道为什么会发生这种情况?

我还观察到,这只发生在 debuggable标志在 build.gradle 中设置为 false 用于构建配置(发布或调试)

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

最佳答案

Android 的系统 UI 处理有些复杂。我建议您将这些文件复制到您的应用程序中:https://gist.github.com/chrisbanes/73de18faffca571f7292

然后在您的 Activity 中:


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

}

我在我的应用程序中做到了这一点,并且一切正常。我已经停止尝试手动处理标志。

关于android - 防止在方向更改时全屏退出(窗口标志清除?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62027023/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com