鸿蒙-expandSafeArea使用

应用未使用setWindowLayoutFullScreen()接口设置窗口全屏布局时,默认使能组件安全区布局。可以使用expandSafeArea属性扩展安全区域属性进行调整

扩展安全区域属性原理

  • 布局阶段按照安全区范围大小进行UI元素布局。
  • 布局完成后查看设置了expandSafeArea的组件边界(不包括margin)是否和安全区边界相交。
  • 如果设置了expandSafeArea的组件和安全区边界相交,根据expandSafeArea传递的属性则进一步扩大组件绘制区域大小覆盖状态栏、导航条这些非安全区域。
  • 上述过程仅改变组件自身绘制大小,不进行二次布局,不影响子节点和兄弟节点的大小和位置。
  • 子节点可以单独设置该属性,只需要自身边界和安全区域重合就可以延伸自身大小至非安全区域内,需要确保父组件未设置clip等裁切属性。
  • 配置expandSafeArea属性组件进行绘制扩展时,需要关注组件不能配置固定宽高尺寸,百分比除外。

背景图和视频场景

设置背景图、视频控件大小为安全区域大小并配置expandSafeArea属性。

@Entry
@Component
struct SafeAreaExample1 {
  build() {
    Stack() {
      Image($r('app.media.bg'))
        .height('100%').width('100%')
        .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTT
HarmonyOS 中,`TabContent` 组件的 `expandSafeArea` 属性用于控制组件是否扩展到设备的“安全区域”之外[^1]。安全区域是指屏幕中没有被系统 UI(如状态栏、导航栏、刘海或打孔区域)遮挡的部分。默认情况下,某些组件的布局会被限制在安全区域内,以避免内容被系统 UI 遮挡或切割。 当 `expandSafeArea` 设置为 `true` 时,`TabContent` 的内容可以扩展到整个屏幕区域,包括状态栏、导航栏等原本被系统 UI 占据的空间。这种设置通常用于需要全屏展示的场景,例如沉浸式界面或需要自定义状态栏区域内容的设计。如果设置为 `false`(默认值),则 `TabContent` 的内容将自动避开系统 UI 区域,确保内容不会被遮挡。 需要注意的是,该属性的生效还受到其他布局属性的影响,例如 `position` 和 `offset`。如果组件未设置 `position` 或 `offset` 等布局属性,并且组件边界没有与避让区重叠,则即使设置了 `expandSafeArea` 属性,也不会生效。这适用于某些特定组件,如弹窗和半模态组件。 ### 示例代码 以下是一个使用 `TabContent` 并设置 `expandSafeArea` 属性的简单示例: ```typescript TabContent({ title: '首页' }) { Column() { Text('这是首页内容') .fontSize(30) .fontWeight(FontWeight.Bold) } .width('100%') .height('100%') .expandSafeArea(true) // 允许内容扩展到安全区域外 } ``` ### 使用场景 - **沉浸式体验**:适合全屏展示图片、视频或游戏界面,提升用户体验。 - **自定义状态栏**:允许开发者自定义状态栏区域的内容,例如设置渐变背景或图标。 - **特殊 UI 设计**:当需要与系统 UI 进行视觉融合时,如渐变到状态栏的设计。 ### 注意事项 - 使用 `expandSafeArea` 时需谨慎,确保内容在扩展后仍然可读且不会被系统 UI 遮挡。 - 在某些设备上,系统可能会强制保留部分安全区域,以确保基本的交互功能(如返回手势)不受影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值