【每日学点鸿蒙知识】自界说时间选择器、Image加载当地资源、线程切换、hap ...

打印 上一主题 下一主题

主题 791|帖子 791|积分 2373

1、HarmonyOS 如何自界说时间选择器?

可以参考如下demo:
  1. let anmDuration: number = 200;
  2. @Entry
  3. @Component
  4. struct TextPickerExample1 {
  5.   @State firstDate: string = '2024-06-19'
  6.   @State date: string = '2024年06月19号'
  7.   controller: CustomDialogController = new CustomDialogController({
  8.     builder: TextPicker1({
  9.       cancel: (date: string) => {
  10.         this.onCancel(date)
  11.       },
  12.       confirm: (date: string, date1: Date) => {
  13.         this.onAccept(date, date1)
  14.       },
  15.       date: this.firstDate,
  16.     }),
  17.     autoCancel:false,
  18.     cornerRadius: 0,
  19.     customStyle: true,
  20.     alignment: DialogAlignment.BottomEnd
  21.   })
  22.   onCancel(date: string) {
  23.   }
  24.   onAccept(date: string, date1: Date) {
  25.     let year: string = date1.getFullYear().toString();
  26.     let month: string = (date1.getMonth() + 1) < 10 ? ('0' + (date1.getMonth() + 1)).toString() : (date1.getMonth() + 1).toString();
  27.     let day: string = date1.getDate().toString();
  28.     this.date = year + '年' + month + '月' + day + '日'
  29.     this.firstDate = year + '-' + month + '-' + day + '-'
  30.   }
  31.   build() {
  32.     Column() {
  33.       Text(this.date)
  34.       Text('日期').onClick(() => {
  35.         this.controller.open()
  36.       })
  37.     }
  38.   }
  39. }
  40. @CustomDialog
  41. struct TextPicker1 {
  42.   aboutToAppear(): void {
  43.     this.selectedDate = new Date(this.date)
  44.   }
  45.   @State date: string = '2026-08-08'
  46.   controller: CustomDialogController
  47.   //起始年份
  48.   @State startYear: number = 1970
  49.   @State isLunar: boolean = false
  50.   @State showFlag: Visibility = Visibility.Visible;
  51.   @State isAutoCancel: boolean = false;
  52.   @State selectedDate: Date = new Date(this.date)
  53.   cancel?: (date: string) => void
  54.   confirm?: (date: string, date1: Date) => void
  55.   // 延迟关闭弹窗,让自定义的出场动画显示
  56.   @State nowDate: Date = new Date()
  57.   destroy() {
  58.     this.showFlag = Visibility.Hidden
  59.     setTimeout(() => {
  60.       this.controller.close()
  61.     }, anmDuration)
  62.   }
  63.   build() {
  64.     Column() {
  65.       Column() {
  66.         Row() {
  67.           Button('取消', { type: ButtonType.Normal }).backgroundColor(Color.White).fontColor(Color.Gray)
  68.             .onClick(() => {
  69.               if (this.cancel) {
  70.                 this.destroy();
  71.                 this.cancel(this.date)
  72.               }
  73.             })
  74.           Button('确定', { type: ButtonType.Normal }).backgroundColor(Color.White).fontColor("#fff5b6dd")
  75.             .onClick(() => {
  76.               if (this.confirm) {
  77.                 this.destroy();
  78.                 this.date = this.nowDate.toString()
  79.                 this.confirm(this.date, this.nowDate)
  80.               }
  81.             })
  82.         }.width('100%').justifyContent(FlexAlign.SpaceBetween)
  83.         DatePicker({
  84.           start: new Date('1970-1-1'),
  85.           end: new Date('2100-1-1'),
  86.           selected: this.selectedDate
  87.         })
  88.           .disappearTextStyle({ color: Color.Gray, font: { size: '16fp', weight: FontWeight.Bold } })
  89.           .textStyle({ color: '#ff182431', font: { size: '16', weight: FontWeight.Normal } })
  90.           .selectedTextStyle({ color: "#fff5b6dd", font: { size: '22fp', weight: FontWeight.Regular } })
  91.           .lunar(this.isLunar)
  92.           .onDateChange((value: Date) => {
  93.             this.nowDate = value
  94.             console.info('select current date is: ' + value.toString())
  95.           })
  96.       }
  97.     }.width('100%').backgroundColor(Color.White).visibility(this.showFlag)
  98.     // 定义进场出场转场动画效果
  99.     .transition(TransitionEffect.OPACITY.animation({ duration: anmDuration })
  100.       .combine(TransitionEffect.translate({ y: 100 })))
  101.   }
  102. }
复制代码
2、HarmonyOS 体系图片组件Image加载当地资源读取目录方式?

体系在辨认以下实例时是如何根据相对路径取到绝对路径的
当地资源创建文件夹,将当地图片放入ets文件夹下的任意位置。Image组件引入当地图片路径,即可显示图片(根目录为ets文件夹)。
frameworks/core/image/image\_loader.cpp差异的的URL会创建差异的imageLoader,然后走对应的加载逻辑
好比这种写法;Image($r(“app.media.symbol”))会走ResourceImageLoader
3、HarmonyOS ArkTS 可否像kotin一下,可以在子线程中直接调用CoroutineScope.launch转到UI线程?

在子线程A中创建子线程B,想在子线程B中直接发消息给UI线程。肯定要先子线程B发消息给子线程A,子线程A收到消息后,再发消息给UI线程吗。有没有办法让子线程B直接发消息给UI线程大概说转到UI线程
可以用Emitter进行线程间通信,在UI线程吸收事件消息,刷新ui,文档如下:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/itc-with-emitter-V5
4、HarmonyOS hap包下载到手机上怎么安装?

hap包下载到手机上怎么安装。内部环境,流水线构建了应用的产物,得到hap包,下载到手机上,怎么安装呢。
现在不支持手动打开hap包安装应用。可以通过开放式测试,上架应用市场,指定测试职员,进行应用分发测试操作流程参考:https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-Guides/agc-betatest-introduction-0000001071477284
如不想上架应用市场,进行企业内部测试可参考:https://developer.huawei.com/consumer/cn/doc/app/agc-help-harmonyos-internalrelease-0000001756878768
5、HarmonyOS overlay中,沉醉模式似乎无效 expandSafeArea,叨教overlay的扩展规则是怎样的呢?

基于navigation去扩展遮罩,自己自带安全地区扩展,但是遮罩并没有像期望一样覆盖全屏,叨教大概是什么缘故原由导致的呢?
navigation默认支持安全区避让特性(默认值为:expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])),以是改成expandSafeArea([])即可。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表