HarmonyOS 上滑三段式抽屉怎么实现

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

方案一:使用半模态框实现抽屉效果

参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-sheet-transition-V5

方案二:

通过浮层属性和Panel容器组合实现效果

参考文档:

Panel:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-panel-V5

浮层:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-overlay-V5

方案二示例参考:

// ets
@Entry
@Component
struct Index {
  private controller: TabsController = new TabsController()
  @State currentIndex: number = 0;

  @Builder TabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
    Column() {
      Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
        .size({ width: 25, height: 25 })
      Text(title)
        .fontColor(this.currentIndex === targetIndex ? '#ff1244' : '#6B6B6B')
    }
    .width('100%')
    .height(50)
    .justifyContent(FlexAlign.Center)
    .onClick(() => {
      this.currentIndex = targetIndex;
      this.controller.changeIndex(this.currentIndex);
    })
  }

  aboutToAppear(): void {

  }

  build() {
    Column() {
      Tabs({ barPosition: BarPosition.End,controller: this.controller,index:this.currentIndex}) {
        TabContent() {
          Column(){
          }.backgroundColor("#FFC0CB").height('100%').width('100%')
          .overlay(this.getPanel(), {
            align: Alignment.Bottom,
          })
        }
        .backgroundColor("#D1D1D1")
        .tabBar(this.TabBuilder('tab1',0,$r('app.media.startIcon'),$r('app.media.startIcon')))
        TabContent() {
          Text('测试')
        }
        .backgroundColor("#D1D1D1")
        .tabBar(this.TabBuilder('tab2',1,$r('app.media.startIcon'),$r('app.media.startIcon')))
      }
    }
    .width('100%')
  }

  @Builder getPanel(){
    Column(){
      Column(){
      }.width('100%').height('10%').backgroundColor('white')
      Panel(true) { // 展示
        Column() {
          Text('弹框内容')
        }
      }.height('90%')
      .type(PanelType.Foldable)
      .mode(PanelMode.Full)
      .dragBar(true) // 默认开启
      .showCloseIcon(false) // 显示关闭图标
      .onChange((width: number, height: number, mode: PanelMode) => {
        console.info(`width:${width},height:${height},mode:${mode}`)
      })
      .onHeightChange((height)=>{
      })
    }.height('100%')
  }
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 如何实现抽屉效果的控件
84浏览 • 1回复 待解决
HarmonyOS 底部的那种弹框
54浏览 • 1回复 待解决
HarmonyOS 怎么禁止侧
162浏览 • 1回复 待解决
HarmonyOS 怎么禁止右
39浏览 • 1回复 待解决
HarmonyOS webview侧返回一页问题
828浏览 • 1回复 待解决
HarmonyOS 底部会出现任务管理器
35浏览 • 1回复 待解决
鸿蒙-如何实现播放一音频
11111浏览 • 2回复 待解决
【JS】如何实现删除功能?
3483浏览 • 1回复 待解决
TextField怎么给某文字设置颜色
9011浏览 • 2回复 待解决