HarmonyOS 鸿蒙Next半模态相关问题

HarmonyOS 鸿蒙Next半模态相关问题

使用半模态遇见了几个问题,希望了解的友友们指导下。

  1. 将半模态的显示框拉到一定高度后,下滑时半模态无法收起到固定高度,一直保留在最高高度?

  2. 将半模态显示上滑到最高高度时,半模态里面的显示加载特别慢。而且每次半模态下拉回去后,再上滑依然里面的显示加载很慢。

半模态有没有开始初始化一次性加载完成?

  1. 半模态一显示,后面的page应该有个蒙层,想要做到半模态一定高度(比如100vp)时page没有蒙层,达到一定高度(300vp)时page有蒙层。

目前使用的是enableOutsideInteractive(true)即和page有交互,但是不能达到需求要求。


更多关于HarmonyOS 鸿蒙Next半模态相关问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复
  1. 可以收起到固定高度,preferType不用设置成底部弹窗,默认跟手即可,参考下面demo。

  2. 可以通过设置scrollSizeMode: ScrollSizeMode.CONTINUOUS属性解决显示加载慢的问题

    • FOLLOW_DETENT:设置半模态面板跟手滑动结束后更新内容显示区域
    • CONTINUOUS:设置半模态面板在滑动过程中持续更新内容显示区域
  3. 监听高度变化,在onHeightDidChange回调中控制是否显示蒙层,动态设置蒙层颜色。

下面demo应该可以满足你的需求:

@Entry
@Component
export struct SlideUpPanelWithGesture {
  @State isShowSheet: boolean = true
  private items : number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  @State showMask: boolean = false;

  @Builder
  SheetBuilder() {
    Column() {
      // 第一步:自定义滚动容器
      List({space:'10vp'}) {
        ListItem() {
          Text("hello--你好").fontSize(16).fontWeight(FontWeight.Bold)
        }.width('90%').height('80vp').backgroundColor('#ff53ecd9').borderRadius(10)

        ForEach(this.items,(item : number) => {
          ListItem() {
            Text(String(item)).fontSize(16).fontWeight(FontWeight.Bold)
          }.width('90%').height('80vp').backgroundColor('#ff53ecd9').borderRadius(10)
        })
      }.alignListItem(ListItemAlign.Center).margin({top:'20vp'}).width('100%').height(800)
      // 第二步:设置滚动组件的嵌套滚动属性
      .nestedScroll({
        scrollForward: NestedScrollMode.PARENT_FIRST,
        scrollBackward: NestedScrollMode.SELF_FIRST,
      })

    }.width('100%').height('100%')
  }
  build() {
    Column() {
      Button('Open Sheet').width('90%').height('80vp')
        .onClick(() =>{
          this.isShowSheet = true;
        })
        .bindSheet(this.isShowSheet, this.SheetBuilder(), {
          detents:[250, SheetSize.MEDIUM, 650],
          showClose: false,
          scrollSizeMode: ScrollSizeMode.CONTINUOUS,
          maskColor: this.showMask ? 'rgba(0, 0, 0, 0.5)' : 'rgba(0, 0, 0, 0)',
          onHeightDidChange:(number: number) => {
            let currentN = px2vp(number);
            if(currentN > 300){
              this.showMask = true;
            }
            if(currentN < 300){
              this.showMask = false;
            }
          }
        })
    }.width('100%').height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

更多关于HarmonyOS 鸿蒙Next半模态相关问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你好!

对于问题(1)将半模态的显示框拉到一定高度后,下滑时半模态无法收起到固定高度,一直保留在最高高度?

可能是我没表达清楚,就是半模达到最大高度后,下滑收回半模框。有时候起作用的是滚动状态,而不是下滑收回作用(即使滚动里面的内容已经下拉到最上面了),

HarmonyOS的流畅动画和过渡效果让操作更加顺畅,体验极佳。

场景是list滚动到顶部,继续向下滑动list,想要半模态高度降低一档,而不是列表弹簧效果?

这个暂时还不支持,目前无法联动内部组件改变半模态高度,需要控制条跟手滑动改变高度。

若解决了问题,帮忙点下已采纳哈~

HarmonyOS鸿蒙Next的半模态设计是一种用户界面交互模式,允许用户在不完全离开当前界面的情况下,执行其他任务或获取信息。半模态通常以弹出窗口、侧边栏或浮动面板的形式出现,用户可以在不中断当前操作的情况下,快速访问或操作其他功能。这种设计在增强用户体验的同时,保持了界面的简洁和高效。

在鸿蒙Next中,半模态的实现依赖于分布式能力和原子化服务。分布式能力使得半模态界面可以在多个设备间无缝切换和共享,而原子化服务则确保了每个半模态功能模块的独立性和可复用性。开发者可以通过鸿蒙的ArkUI框架,使用声明式UI和响应式编程模型,快速构建半模态界面。

半模态的应用场景包括但不限于:快速设置、通知中心、多任务切换、快捷操作等。例如,用户可以在观看视频时,通过半模态界面快速调整音量和亮度,而不需要退出全屏模式。这种设计在提升操作效率的同时,也减少了用户的操作步骤。

鸿蒙Next的半模态设计还强调了与系统其他组件的协同工作。例如,半模态界面可以与系统通知、任务管理器、控制中心等组件进行深度整合,确保用户在不同场景下都能获得一致的操作体验。此外,半模态界面的动画效果和交互细节也经过精心设计,以提供流畅和自然的用户体验。

总之,HarmonyOS鸿蒙Next的半模态设计是一种创新的用户界面交互模式,通过分布式能力和原子化服务,实现了高效、简洁和一致的用户体验。开发者可以通过ArkUI框架,快速构建和集成半模态功能,满足不同应用场景的需求。

在HarmonyOS(鸿蒙系统)中,半模态(Semi-Modal)界面设计是一种用户交互方式,介于全模态和非模态之间。它允许用户在保持当前任务的同时,执行其他操作。常见应用场景包括弹出菜单、浮动窗口等。

特点:

  1. 部分遮挡:半模态界面不会完全遮挡主界面,用户仍可看到部分背景内容。
  2. 即时反馈:用户操作后,系统会立即给出反馈,但不强制中断当前任务。
  3. 轻量级交互:适合快速操作,如选择、确认等。

设计建议:

  1. 明确优先级:确保半模态内容与当前任务相关,避免干扰。
  2. 简洁设计:界面元素应简洁,减少用户认知负担。
  3. 易关闭:提供明显的关闭按钮或手势,方便用户退出。

通过合理使用半模态设计,可以提升用户体验,增强应用的交互性和灵活性。

回到顶部