HarmonyOS 如何实现popupwindow功能

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

示例参考如下:

export class PageIndex {
  pageString: string = "";
  pageIndex: number = 0;
  startIndex: number = 0;
  endIndex: number = 0;
}

@Entry
@Component
struct TestPopUp {
  @State pageColorStart: string = '#FF8C6754'
  @State isPopWindowShow: boolean = false
  @State mPageIndex: PageIndex[] = []

  aboutToAppear(): void {
    this.mPageIndex = this.computePagerIndex(50, 1024, true)
  }

  build() {
    Column() {
      Line()
        .width('100%')
        .height('1px')
        .backgroundColor(Color.Red)
        .bindPopup(this.isPopWindowShow, {
          builder: this.popupBuilder, // 气泡的内容
          placement: Placement.Bottom, // 气泡的弹出位置
          backgroundBlurStyle: BlurStyle.NONE,
          enableArrow: false,
          autoCancel: true,
          arrowOffset: 0,
          targetSpace: 0,
          radius: 0,
          width: "100%",
          showInSubWindow: true,
          maskColor: Color.Transparent,
          shadow: { radius: 0, color: Color.Transparent },
          onStateChange: (e) => {
            if (!e.isVisible) {
              this.isPopWindowShow = false
            }
          }
        })
      Button("点击").onClick(() => {
        this.isPopWindowShow = true
      })
    }.justifyContent(FlexAlign.Center).width('100%').height('100%').backgroundColor(Color.White)
  }

  @Builder
  popupBuilder() {
    List() {
      ForEach(this.mPageIndex, (value: PageIndex) => {
        ListItem() {
          Stack({ alignContent: Alignment.TopEnd }) {
            Row() {
              Text(value.pageString).fontSize(13)
            }.justifyContent(FlexAlign.Center).width('100%').height('100%')
          }
          .backgroundColor('#f8f8fa')
          .borderWidth('1.2px')
          .borderRadius(5)
          .width('100%')
          .height(30)
        }.padding(4).onClick(() => {
        })
      }, (value: PageIndex) => {
        return value.pageIndex + "-" + value.pageString
      })
    }
    .width('100%')
    .height(200)
    .lanes(4)
    .borderRadius({ bottomLeft: 10, bottomRight: 10 })
    .backgroundColor("#ffffff")
    .padding(8)
    .onAreaChange((oldArea: Area, newArea: Area) => {
    })
  }

  computePagerIndex(pageSize: number, trackCounts: number, isAsc: boolean): PageIndex[] {
    const mPagerIndexs: PageIndex[] = [];
    const group: number = Math.ceil(trackCounts / pageSize);
    for (let i: number = 0; i < group; i++) {
      const pi: PageIndex = new PageIndex();
      pi.pageIndex = i + 1;
      if (isAsc) {
        pi.startIndex = pageSize * i + 1;
        pi.endIndex = Math.min(pageSize * (i + 1), trackCounts);
        pi.pageString = `${pi.startIndex}~${pi.endIndex}`;
      } else {
        pi.startIndex = trackCounts - pageSize * i;
        pi.endIndex = Math.max(trackCounts - pageSize * (i + 1) + 1, 1);
        pi.pageString = `${pi.startIndex}~${pi.endIndex}`;
      }
      mPagerIndexs.push(pi);
    }
    return mPagerIndexs;
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 如何实现轮询功能
208浏览 • 1回复 待解决
HarmonyOS 分享功能如何实现
337浏览 • 1回复 待解决
HarmonyOS 如何实现ImagePreview功能
16浏览 • 1回复 待解决
HarmonyOS 如何实现DeepLink功能
223浏览 • 1回复 待解决
HarmonyOS 如何实现直播功能
197浏览 • 1回复 待解决
HarmonyOS 曝光功能如何实现
205浏览 • 1回复 待解决
HarmonyOS如何实现头像选择功能
774浏览 • 1回复 待解决
HarmonyOS 如何实现图片编辑功能
264浏览 • 1回复 待解决
HarmonyOS 如何实现文件选择功能
188浏览 • 1回复 待解决
HarmonyOS 如何实现搜索历史功能
212浏览 • 1回复 待解决
HarmonyOS 如何实现长按点击功能
237浏览 • 1回复 待解决
Grid如何实现拖拽功能
2771浏览 • 1回复 待解决
鸿蒙如何实现分享功能
17939浏览 • 2回复 待解决
定时提醒功能如何实现?
5220浏览 • 1回复 待解决
HarmonyOS如何实现粘贴板功能
521浏览 • 1回复 待解决
HarmonyOS 如何实现手势密码功能
729浏览 • 1回复 待解决
HarmonyOS 防截屏功能如何实现
166浏览 • 1回复 待解决
HarmonyOS 如何实现马赛克功能
12浏览 • 1回复 待解决
HarmonyOS 如何实现语音助手的功能
464浏览 • 1回复 待解决
HarmonyOS 如何实现页面的继承功能
197浏览 • 1回复 待解决