前言

本文用来记录目前为止最新的设置沉浸式布局方式,跟之前的固定写法相比更加简单,自由度也更高。


注意:
返回值insets:当前窗口所有系统UI占用的空间信息,包括状态栏 导航栏 刘海屏 手势区域 IME键盘 系统手势区域
如果页面内有recyclerView时,建议额外设置recyclerView.clipToPadding = false,可以让recyclerView的内容绘制到内边距所在的地方实现流畅的显示。

//1.开启沉浸式模式,即内容入侵到状态栏+导航栏,同时这两个设置为透明
 enableEdgeToEdge() //
//2.通过监听系统窗口获取到系统栏数据,然后根据需求设置给当前的根布局
  ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
          //获取到窗口的边距信息
   val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
    v.setPadding( //这里兼容了根布局已有的内边距设置
     v.paddingLeft + systemBars.left,
     v.paddingTop, //上边距不设置实现沉浸式效果
     v.paddingRight + systemBars.right,
     v.paddingBottom + systemBars.bottom //底部会自动根据虚拟按键进行边距的设置
   )
   insets //此处返回值表示继续向子View传递,让子Viw也可以处理Insets
  }
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐