半透明状态栏 Miui 设备

Translucent Status Bar Miui devices

我想在设备运行 MIUI 上将状态栏设置为半透明。我找不到解决这个问题的方法。

我试过这样做:

activity.window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLCUENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

同样,当我想删除半透明状态栏时

activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

它适用于大多数设备(我还没有尝试过所有设备)但它不适用于 MIUI 设备。我已经在小米红米 Note 4 运行 Android 7.0 (Nougat) 上试过了。透明状态栏正常,半透明状态栏不行

在 Android M 及更高版本上,您可以使用以下代码获得带有深色图标的透明状态

window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

或者,如果您需要带有白色图标的透明状态,只需从最后一行删除 LIGHT_STATUS_BAR 标志

要使其在您必须做的所有设备上运行:

fun setTranslucent(activity : Activity){
    activity.window.statusBarColor = 0x66000000
}

fun clearTranslucent(activity : Activity){
    activity.window.statusBarColor = Color.TRANSPARENT
}

此代码也适用于 运行 MIUI 设备。我不知道为什么标志不起作用,可能是因为 MIUI 设备以某种奇怪的方式绘制状态栏。如果你知道为什么我会很高兴听到它:)