HarmonyOS 鸿蒙Next 自定义Loading在har不显示

发布于 1周前 作者 itying888 最后一次编辑是 5天前 来自 鸿蒙OS
@Entry({routeName:"LoadingDialog"})
@Component
 struct LoadingDialog{

  @StorageProp('loading_message') message: string|Resource = $r('app.string.loading')

  build() {
    Stack({ alignContent: Alignment.Center }) {
      Column() {
        LoadingProgress()
          .width(42)
          .height(42)
          .color($r('app.color.loading'))

        Text(this.message ?? $r('app.string.loading'))
          .fontColor(Color.White)
          .fontSize(15)
          .fontColor(Color.White)
          .fontWeight(FontWeight.Medium)
          .margin({ top: 12 })
          .width('100%')
          .textAlign(TextAlign.Center)
      }
      .justifyContent(FlexAlign.Center)
      .width(108)
      .height(108)
      .backgroundColor('#88000000')
      .borderRadius(8)
    }
    .width('100%')
    .height('100%')
    .backgroundColor(Color.Transparent)
  }

}
import { display, window } from '@kit.ArkUI'

export class LoadingUtils{

  private static readonly WINDOW_NAME = "loading_window"

  private static loadingWindow: window.Window | null = null

  private static isShowLoading:boolean = false

  private static timeoutId:number = 0

  /**
   * @param message 提示信息
   * @param pagePath 自定义Loading页面路径
   */
  static showLoading(message: string|ResourceStr = $r('app.string.loading'),onTimeOut?:()=>void) {
    if (LoadingUtils.isShowLoading) {
      return
    }
    let context = getContext()
    window.createWindow({
      name: LoadingUtils.WINDOW_NAME,
      windowType: window.WindowType.TYPE_DIALOG,
      ctx: context
    }).then(async win => {
      LoadingUtils.loadingWindow = win
      if (typeof (message) != 'string') {
        message = context.resourceManager.getStringSync(message) ?? $r('app.string.loading')
      }
      AppStorage.setOrCreate('loading_message', message)
      await win.loadContentByName("LoadingDialog")
      win.setWindowBackgroundColor('#88000000')
      let d = display.getDefaultDisplaySync()
      await win.resize(d.width, d.height)
      await win.setWindowFocusable(true)
      win.showWindow().then(() => {
        LoadingUtils.timeoutId = setTimeout(async () => {
         await LoadingUtils.hideLoading()
          LoadingUtils.isShowLoading = false
          if (onTimeOut) {
            onTimeOut()
          }
        }, 30000)
        LoadingUtils.isShowLoading = true
      })
    })
  }

  static async hideLoading():Promise<void> {
    return new Promise((resolve: Function)=>{
      window.findWindow(LoadingUtils.WINDOW_NAME)?.destroyWindow()
        .then(()=>{
          LoadingUtils.loadingWindow = null
          LoadingUtils.isShowLoading = false
          if (LoadingUtils.timeoutId != 0) {
            clearTimeout(LoadingUtils.timeoutId)
            LoadingUtils.timeoutId = 0
          }
          resolve()
        }).catch(()=>{
        resolve()
      })
    })
  }
}

shared 引用的时候可以正常显示,har的时候Loading就显示不出来


更多关于HarmonyOS 鸿蒙Next 自定义Loading在har不显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

创建的  windowStage.createSubWindow  没有再使用

window.createWindow({

      name: LoadingUtils.WINDOW_NAME,

      windowType: window.WindowType.TYPE_DIALOG,

      ctx: context

    })<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next 自定义Loading在har不显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next系统中,如果在har文件中自定义的Loading界面不显示,可能的原因和解决方法如下:

  1. 资源文件路径错误:确保自定义Loading界面的资源文件(如图片、布局文件等)路径正确无误,并且已被正确引入到har包中。

  2. 组件未正确注册:检查是否在har包的manifest文件中正确注册了自定义Loading界面所使用的组件。

  3. 加载逻辑问题:自定义Loading界面的加载逻辑可能存在问题,检查相关代码,确保在合适的时机正确加载并显示Loading界面。

  4. 权限问题:确认应用是否拥有访问和显示自定义Loading界面所需的所有权限。

  5. 系统兼容性:检查自定义Loading界面是否兼容当前运行的HarmonyOS版本,以及是否存在因系统版本差异导致的显示问题。

  6. 日志诊断:查看系统日志和应用日志,寻找与自定义Loading界面不显示相关的错误信息或警告,以便进行针对性修复。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部