bindSheet

        给组件绑定半模态页面,点击后显示模态页面。

参数名 类型 必填 说明
isShow Optional<boolean>

是否显示半模态页面。

从API version 10开始,该参数支持$$双向绑定变量。

builder CustomBuilder 配置半模态页面内容。
options SheetOptions 配置半模态页面的可选属性。

注意:

  1. 在非双向绑定情况下,以拖拽方式关闭半模态页面不会改变isShow参数的值。

  2. 为了使isShow参数值与半模态界面的状态同步,建议使用$$双向绑定isShow参数。

  3. 在半模态单挡位向上拖拽或是多挡位上滑换挡情况下,内容在拖拽结束或换挡结束后更新显示区域。

  4. 半模态是一个严格和宿主节点绑定在一起的弹窗。若是想实现类似“页面显示的瞬间就弹出半模态”的效果,请确认宿主节点是否已挂载上树。若宿主节点还没上树就将isShow置为true,半模态将不生效。建议使用onAppear函数,确保在宿主节点挂载后再显示半模态。

    尤其是 SheetMode = EMBEDDED 时,除宿主节点外,还需确保对应的页面节点成功挂载。

  5. 半模态页面的离场动效不支持打断,动效执行期间无法响应其他手势动作。目前离场动效使用弹簧曲线,该动画曲线存在视觉上并不明显的拖尾动画。因此,在半模态退出时,视觉上半模态页面已经消失,但此时动效可能还未结束,若想再次点击拉起半模态页面则不会响应。需要等动效完全结束后,才可以再次拉起。

 小案例:

  代码:

@Entry
@Component
struct BindSheetExample {
  @State isShowSheet: boolean = false; // 控制抽屉显示状态
  @State sheetHeight: number = 300;    // 动态高度控制

  // 构建抽屉内容
  @Builder
  sheetContent() {
    Column() {
      // 顶部操作栏
      Row() {
        Text('设置')
          .fontSize(20)
          .fontColor(Color.Black)
          .margin({ left: 15 })

        Blank()

        Image($r('app.media.mv17'))
          .width(24)
          .height(24)
          .margin({ right: 15 })
          .onClick(() => {
            this.isShowSheet = false; // 点击关闭图标
          })
      }
      .width('100%')
      .padding(10)

      Divider().color(0xeeeeee)

      // 菜单项列表
      Column() {
        Text('个人资料').fontSize(18).margin(10)
          .onClick(() => { /* 处理点击事件 */ })
        Text('账号安全').fontSize(18).margin(10)
        Text('通知设置').fontSize(18).margin(10)
        Text('关于我们').fontSize(18).margin(10)
      }
      .width('100%')
      .alignItems(HorizontalAlign.Start)
    }
    .backgroundColor(Color.White)
  }

  build() {
    Column() {
      Button('打开设置面板')
        .fontSize(20)
        .width(200)
        .height(50)
        .backgroundColor('#409EFF')
        .onClick(() => {
          this.isShowSheet = true; // 点击触发显示
          this.sheetHeight = 300;
        })
        .margin({ top: 50 })
    }
    .width('100%')
    .height('100%')
    .bindSheet(
      $$this.isShowSheet,
      this.sheetContent(),
      {
        height: this.sheetHeight,
        backgroundColor: Color.White,
        showClose: false,       // 自定义关闭按钮
        dragBar: true,          // 显示拖拽条
        onDisappear: () => {    // 关闭完成回调
          console.log('抽屉已完全关闭');
        }
      }
    )
  }
}

效果:

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐