HarmonyOS 鸿蒙Next 在顶层视图追加一个视图

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 在顶层视图追加一个视图 当页面h5页面需要下载文件时,通过桥接方法通知原生去下载,然后需要显示进度条,我们是否有办法在顶层视图的底部添加一个视图显示下载进度

2 回复

如果只是让视图显示的话,添加ArkTS声明式ui是用条件+状态管理来控件渲染。所以可以通过if……else……或者某个数据的true/false来动态添加或者销毁。 或者 可以通过wrapBuilder封装全局@Builder来实现,不同的组件可以设置不同的@builder。 可以参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-wrapbuilder-V5 动态添加view。 类似demo

// 定义一个空的builder
[@Builder](/user/Builder)
function defaultBuilder(): void {}

// 定义一个class,有对应的WrappedBuilder
export class DataModel {
  id: string = ''
  value: string = ''
  otherProp: string = ''
  builderWrap: WrappedBuilder<[string]> = wrapBuilder(defaultBuilder)

  constructor(id: string, value: string, builderWrap: WrappedBuilder<[string]>) {
    this.id = id
    this.value = value
    this.builderWrap = builderWrap
  }
}

[@Builder](/user/Builder)
function CustomBuilder(param: string) {
  Column() {
    Text(param)
      .fontSize(50)
      .fontWeight(FontWeight.Bold)
  }.height(50)
}

let customPageWrappedBuilder: WrappedBuilder<[string]> = wrapBuilder(CustomBuilder);

export function getNewsData(): Promise<DataModel[]> {
  let arr: DataModel[] = [new DataModel('1', 'test1', customPageWrappedBuilder), new DataModel('2', 'test2', customPageWrappedBuilder)]
  return new Promise(resolve => {
    resolve(arr)
  })
}

export function getNewsItem(id: string, value: string): Promise<DataModel> {
  return new Promise(resolve => {
    resolve(new DataModel(id, value, customPageWrappedBuilder))
  })
}

@Entry
@Component
struct WrapperBuilderPage {
  @State testData: DataModel[] = []
  @State count: number = 2

  async aboutToAppear() {
    this.testData = await getNewsData();
  }
  build() {
    Column() {
      Row() {
        Button('addView').onClick(async () => {
          this.count++
          let newsItem: DataModel = await getNewsItem('' + this.count, 'test' + this.count)
          this.testData.push(newsItem)
        })
        Button('removeView').onClick(async () => {
          this.count--
          this.testData.pop()
        })
      }
      Column() {
        ForEach(this.testData, (item: DataModel) => {
          item.builderWrap.builder(item.value)
        })
      }
    }
    .width('100%')
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 在顶层视图追加一个视图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,若想在顶层视图(通常指根视图或活动窗口)中追加一个视图,你可以通过以下步骤实现。这里假设你已经熟悉鸿蒙系统的开发环境和基础组件使用。

  1. 获取顶层视图容器:首先,你需要获取当前活动的顶层视图容器。这通常是通过布局文件或代码动态创建的根视图。

  2. 创建新视图:根据你的需求,创建一个新的视图组件(如Component或其子类)。确保新视图已经正确初始化并设置了必要的属性。

  3. 添加视图到顶层容器:使用顶层容器的addComponent或类似方法,将新创建的视图添加到容器中。这通常涉及到指定视图的位置和大小参数,或者通过布局管理器自动处理。

  4. 刷新界面:在某些情况下,你可能需要调用相关方法来刷新界面,以确保新添加的视图能够立即显示。

示例代码(伪代码,具体实现需根据实际API调整):

// 假设topLevelContainer是顶层视图容器
Component* newView = new CustomComponent(); // 创建新视图
topLevelContainer->addComponent(newView); // 添加视图到容器
// 根据需要调用刷新方法

请注意,实际操作中可能需要根据鸿蒙系统的具体API和组件库进行调整。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部