如何使用Kotlin实现App中任意Activity或Fragment保持屏幕常亮?
在Kotlin中实现特定Activity/Fragment保持屏幕常亮的方法
一、针对Activity的实现
有三种常用方式,按需选择:
- XML清单配置(最简单,适合固定需要常亮的页面)
在AndroidManifest.xml中对应Activity标签添加属性:
<activity android:name=".KeepScreenOnActivity" android:keepScreenOn="true" />
- 代码动态设置Window Flag
在Activity的onCreate方法中添加:
class KeepScreenOnActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_keep_screen_on) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
如果需要动态关闭常亮,调用window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)即可。
- 布局View设置(推荐,无需手动管理生命周期)
给布局中的任意View(通常是根布局)添加android:keepScreenOn="true"属性:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> <!-- 页面内容 --> </androidx.constraintlayout.widget.ConstraintLayout>
系统会自动在View可见时保持屏幕常亮,不可见时取消,无需额外代码。
二、针对Fragment的实现
Fragment没有独立Window,可通过以下两种方式实现:
- 通过Fragment根View设置(推荐)
在onViewCreated中给根View设置keepScreenOn属性:
class KeepScreenOnFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // 根View设置后,跟随Fragment生命周期自动管理 view.keepScreenOn = true } }
- 通过关联Activity的Window设置
如果需要通过Window Flag控制,记得在Fragment销毁时清除Flag,避免影响其他页面:
class KeepScreenOnFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } override fun onDestroyView() { super.onDestroyView() requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
注意事项
- 优先使用
android:keepScreenOn属性(清单或布局),无需申请权限,系统自动管理生命周期,比WakeLock更安全高效。 - 不要滥用
WakeLock,它需要android.permission.WAKE_LOCK权限,且容易忘记释放导致电量浪费。
内容的提问来源于stack exchange,提问作者Fahad
相关产品推荐
相关产品推荐

