如何通过代码修改摄像头挖孔与应用切换器的背景颜色?
解决摄像头挖孔与应用切换器颜色异常问题
1. 修复挖孔区域背景色
显示工具栏时,系统会取消全屏标记,挖孔区域会露出窗口默认背景。直接把窗口背景设为黑色即可覆盖浅色异常:
window.setBackgroundDrawable(ColorDrawable(Color.BLACK))
2. 修正应用切换器(导航栏)颜色
应用切换器的背景由navigationBarColor控制,同时要确保图标适配深色背景:
// 设置导航栏为黑色 window.navigationBarColor = Color.BLACK // 让导航栏图标显示为浅色,避免深色背景下看不见 ViewCompat.getWindowInsetsController(window.decorView)?.isAppearanceLightNavigationBars = false
3. 整合到你的显示工具栏逻辑里
把上述代码加到你现有显示工具栏的代码块中,完整示例:
val mDecorView = window.decorView mDecorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) WindowCompat.setDecorFitsSystemWindows(window, true) val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView) ?: return windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) // 新增:处理挖孔和导航栏颜色 window.setBackgroundDrawable(ColorDrawable(Color.BLACK)) window.navigationBarColor = Color.BLACK windowInsetsController.isAppearanceLightNavigationBars = false
4. 横屏额外适配
如果横屏下问题依旧,在配置变化回调里重新设置属性:
override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { window.setBackgroundDrawable(ColorDrawable(Color.BLACK)) window.navigationBarColor = Color.BLACK ViewCompat.getWindowInsetsController(window.decorView)?.isAppearanceLightNavigationBars = false } }
原理说明
- 隐藏控件时视频能覆盖挖孔,是因为
FLAG_FULLSCREEN生效,系统让内容全屏填充,挖孔被视频遮挡;显示工具栏时这个标记被清除,挖孔区域会显示窗口背景,所以要手动设为黑色。 - 你猜测的
windowBackground和navigationBarColor确实是问题的核心,前者控制挖孔区域背景,后者控制应用切换器(导航栏)的背景色。
内容的提问来源于stack exchange,提问作者casolorz
相关产品推荐
相关产品推荐

