diff --git a/Index.ets b/Index.ets index bfda226..59f9d95 100644 --- a/Index.ets +++ b/Index.ets @@ -43,6 +43,7 @@ export { WindowHelper } from './src/main/ets/utils/WindowHelper' * 自定义view */ export { LoadingView } from './src/main/ets/view/LoadingView' +export { SafeView } from './src/main/ets/view/SafeView' /** * 自定义view */ diff --git a/src/main/ets/view/SafeView.ets b/src/main/ets/view/SafeView.ets index 2c37403..02e0779 100644 --- a/src/main/ets/view/SafeView.ets +++ b/src/main/ets/view/SafeView.ets @@ -1,30 +1,95 @@ +import { WindowHelper } from '../utils/WindowHelper' +import { inputMethod } from '@kit.IMEKit' + + @Preview @Component export struct SafeView { + @Consume('pageInfos') pageInfos?: NavPathStack @Link isLoading: boolean + @State _titleText: ResourceStr='' + private _onBackEvent?: () => void @Builder doNothingBuilder() { } + onBack(event: () => void) { + this._onBackEvent = event + return this + } + + titleText(title: ResourceStr) { + this._titleText = title + return this + } + @BuilderParam customBuilderParam: () => void = this.doNothingBuilder build() { - Stack() { - this.customBuilderParam() - Column() { - LoadingProgress() - .color(Color.White) - .width(80).height(80) - Text('努力加载中..') - .fontSize(16) - .fontColor(Color.White) + NavDestination() { + Stack() { + Column() { + Row() + .height(WindowHelper.topRectHeight) + .width('100%') + .backgroundColor('#999999') + Row() { + + Image($r("app.media.base_back")) + .height(15) + .onClick(() => { + if (this._onBackEvent) { + this._onBackEvent() + } else if (this.pageInfos) { + this.pageInfos.pop() + } + }) + + Text(this._titleText ?? '') + .maxLines(1) + .ellipsisMode(EllipsisMode.CENTER) + .textOverflow({ + overflow: TextOverflow.Ellipsis + }) + + Row() { + + } + } + .justifyContent(FlexAlign.SpaceBetween) + .padding({ + left: 15, + right: 15 + }) + .height(44) + .width('100%') + + this.customBuilderParam() + } + .width('100%') + .height('100%') + .justifyContent(FlexAlign.Start) + + Column() { + LoadingProgress() + .color(Color.White) + .width(80).height(80) + Text('努力加载中..') + .fontSize(16) + .fontColor(Color.White) + } + .visibility(this.isLoading ? Visibility.Visible : Visibility.None) + .width('100%') + .height('100%') + .backgroundColor('#40000000') + .justifyContent(FlexAlign.Center) } - .visibility(this.isLoading ? Visibility.Visible : Visibility.None) - .width('100%') - .height('100%') - .backgroundColor('#40000000') - .justifyContent(FlexAlign.Center) - } + }.onClick(() => { + inputMethod.getController().stopInputSession() + }) + .hideTitleBar(true) + .width('100%') + .height('100%') } } \ No newline at end of file diff --git a/src/main/resources/mdpi/media/base_back.png b/src/main/resources/mdpi/media/base_back.png new file mode 100644 index 0000000..6e74d60 Binary files /dev/null and b/src/main/resources/mdpi/media/base_back.png differ diff --git a/src/main/resources/sdpi/media/base_back.png b/src/main/resources/sdpi/media/base_back.png new file mode 100644 index 0000000..1a3360e Binary files /dev/null and b/src/main/resources/sdpi/media/base_back.png differ diff --git a/src/main/resources/xldpi/media/base_back.png b/src/main/resources/xldpi/media/base_back.png new file mode 100644 index 0000000..ff133ec Binary files /dev/null and b/src/main/resources/xldpi/media/base_back.png differ diff --git a/src/main/resources/xxldpi/media/base_back.png b/src/main/resources/xxldpi/media/base_back.png new file mode 100644 index 0000000..073a845 Binary files /dev/null and b/src/main/resources/xxldpi/media/base_back.png differ diff --git a/src/main/resources/xxxldpi/media/base_back.png b/src/main/resources/xxxldpi/media/base_back.png new file mode 100644 index 0000000..69b6636 Binary files /dev/null and b/src/main/resources/xxxldpi/media/base_back.png differ