android 黑色模式下的白色状态栏

qyzbxkaa  于 2023-01-28  发布在  Android
关注(0)|答案(3)|浏览(155)

是否可以在黑暗模式下编程制作白色状态栏?(* 应用程序基于单个活动,我必须只为一个片段制作此状态栏 *)
此外,应用程序应该基于Theme.MaterialComponents.Light.NoActionBar,以没有对其他风格的不良影响。
我试过将白色和用户界面可见性设置为亮模式,但似乎强制变暗会自动应用于状态栏背景。
代码如下所示:

var flags = it.decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
window.decorView.systemUiVisibility = flags

                     //it is #F0F0F0 in white and night sources 
var statusBarColor = context.getColorCompat(R.color.white) 
window?.statusBarColor = statusBarColor

但仅systemUiVisibility标志适用:

h43kikqp

h43kikqp1#

将此添加到Util文件

private val insetsController: WindowInsetsControllerCompat? by lazy {
  activity?.window?.decorView?.let(ViewCompat::getWindowInsetsController)
}

private fun setLightStatusBar(light: Boolean) {
    insetsController?.isAppearanceLightStatusBars = light
}

希望它能解决你的问题。

ohtdti5x

ohtdti5x2#

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.BLUE);
}

另一种方法是创建2个主题类并为状态栏定义特定的颜色。

5f0d552i

5f0d552i3#

好吧,答案就在问题里...但是我以前从没想过要禁用黑暗力量...
正如我提到的,在使用Theme.MaterialComponents.Light.NoActionBar时,我必须禁用forceDark。
所以在这种情况下的解决方案如下所示:

val decorView = window.decorView
    val wic = WindowInsetsControllerCompat(window, decorView)
    wic.isAppearanceLightStatusBars = true

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

        //disable force dark for Light theme
        window.decorView.isForceDarkAllowed = false
    }
    window.statusBarColor = Color.WHITE

相关问题