方法一
工具类
Kotlin
class SetSystemBars {
companion object{
fun setupSystemBars(activity: Activity,view: View) {
// 沉浸式状态栏配置
WindowCompat.setDecorFitsSystemWindows(activity.window, false)
activity.window.statusBarColor = Color.TRANSPARENT
val insetsListener = OnApplyWindowInsetsListener { view, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
view.updatePadding(
// top = systemBars.top, // 顶部留出状态栏空间
bottom = systemBars.bottom,
left = systemBars.left,
right = systemBars.right
)
insets
}
ViewCompat.setOnApplyWindowInsetsListener(view, insetsListener)
}
fun setupSystemBars2(activity: Activity) {
(activity as AppCompatActivity).enableEdgeToEdge(
SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT),
SystemBarStyle.auto(DefaultLightScrim, DefaultDarkScrim))
}
}
}
使用
Kotlin
//onCreate方法中setContentView下调用
SetSystemBars.setupSystemBars(this,findViewById(R.id.ll_content))//ll_content是Activity的根布局id
方法二
java
//activity的onCreate方法中调用
if (supportActionBar != null) {
supportActionBar!!.hide() // 隐藏 ActionBar
}
window.apply {
// 清除默认标志
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
// 设置状态栏透明
statusBarColor = Color.TRANSPARENT
// 让布局延伸到系统栏区域
decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
)
}
val insetsListener = OnApplyWindowInsetsListener { view, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
view.updatePadding(
// top = systemBars.top, // 顶部留出状态栏空间
bottom = systemBars.bottom,
left = systemBars.left,
right = systemBars.right
)
insets
}
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.ll_content), insetsListener)
说明:两种方法都可实现沉浸式状态栏显示布局,并且布局不会被软键盘遮挡