HarmonyOS 鸿蒙Next 自定义Loading在har不显示
@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
创建的 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界面不显示,可能的原因和解决方法如下:
-
资源文件路径错误:确保自定义Loading界面的资源文件(如图片、布局文件等)路径正确无误,并且已被正确引入到har包中。
-
组件未正确注册:检查是否在har包的manifest文件中正确注册了自定义Loading界面所使用的组件。
-
加载逻辑问题:自定义Loading界面的加载逻辑可能存在问题,检查相关代码,确保在合适的时机正确加载并显示Loading界面。
-
权限问题:确认应用是否拥有访问和显示自定义Loading界面所需的所有权限。
-
系统兼容性:检查自定义Loading界面是否兼容当前运行的HarmonyOS版本,以及是否存在因系统版本差异导致的显示问题。
-
日志诊断:查看系统日志和应用日志,寻找与自定义Loading界面不显示相关的错误信息或警告,以便进行针对性修复。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html