Jetpack Compose-保持屏幕常亮
前言
有些页面(播放视频、导航、点餐/收银、计时器、阅读器等)希望在页面停留期间不自动息屏。
Android 上最常见的做法是给 Window 加上 FLAG_KEEP_SCREEN_ON;
如果只想在某个 Compose 页面生效,可以在进入页面时开启、离开页面时关闭。
Compose 中控制(推荐)
优点是作用范围小、退出页面会自动恢复;并且不需要强转 Activity(避免在 Dialog/Preview/非 Activity Context 下崩溃)。
1 | import androidx.compose.runtime.Composable |
使用(放在需要常亮的页面/布局里即可):
1 | KeepScreenOn() |
如果你只想在某个条件下生效:
1 | KeepScreenOn(enabled = isPlaying) |
Activity 中设置(全局)
如果你的需求是“只要在这个 Activity 里就别息屏”,直接对 window 设置 flag 更合适。通常建议在 onResume/onPause 成对设置/清理(比 onCreate/onDestroy 更贴合可见性生命周期)。
1 | class MainActivity : ComponentActivity() { |
主要生效点就是这行:
1 | import android.view.WindowManager |
不要这样写
1 | window.setFlags( |
清除常亮
1 | window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) |
其中你文中提到的:
enableEdgeToEdge()就是 “一键开启透明系统栏 + 全屏布局” 的快捷方式,让你接下来只用关心WindowInsets的 padding,而不用再写繁琐的 Window 配置代码。