Android 全屏沉浸式模式,无布局反弹
在不重新计算布局的情况下,如何在沉浸模式和非沉浸模式之间切换,从而体验反弹效果? 下面是我用来在状态之间切换的相关代码:Android 全屏沉浸式模式,无布局反弹,android,kotlin,android-manifest,android-fullscreen,android-immersive,Android,Kotlin,Android Manifest,Android Fullscreen,Android Immersive,在不重新计算布局的情况下,如何在沉浸模式和非沉浸模式之间切换,从而体验反弹效果? 下面是我用来在状态之间切换的相关代码: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) immersive_btn.setOnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
immersive_btn.setOnClickListener {
toggleImmersive()
}
}
val isInFullScreenImmersiveMode: Boolean
get() = window!!.decorView.systemUiVisibility and View.SYSTEM_UI_FLAG_IMMERSIVE == View.SYSTEM_UI_FLAG_IMMERSIVE
private fun toggleImmersive() {
if (isInFullScreenImmersiveMode) {
showSystemBar()
} else {
setFullScreenImmersiveMode()
}
}
fun showSystemBar() {
window!!.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
}
fun setFullScreenImmersiveMode() {
window!!.decorView.systemUiVisibility = (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_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_IMMERSIVE)
}
显示反弹的视频:
我提出的唯一解决方案是在OnCreate()
中使用window?.setFlags(WindowManager.LayoutParams.FLAG\u全屏,WindowManager.LayoutParams.FLAG\u全屏)
,但这会导致另一个问题:即使不是在全屏沉浸模式下,状态栏也不会显示
编辑:布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/immersive_btn"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Toggle Immersive" />
</RelativeLayout>
似乎是模拟器或布局特定的问题。添加版面以重现问题。@Pavneet_Singh版面文件非常基本,我现在将其添加到原始帖子中。我不是在emulator上测试它,而是在我自己的设备OP6上测试。此外,活动的主题是没有任何定制的常规主题(AppTheme)。用上面的代码复制这种行为是相当容易的。这种行为与安卓R不同,它只移动了一次,这就是为什么我不能复制准确的行为。您可能最终使用viewobserver
来处理更改。@Pavneet_Singh那么这种行为在Android R中是不可复制的?有意思。。你能提出一个解决方案吗?我不介意使用ViewTreeObserver
来防止布局反弹。这需要在不同的设备上进行大量测试。更好,你应该。