当前位置: 首页 > article >正文

【每日学点鸿蒙知识】自定义时间选择器、Image加载本地资源、线程切换、hap包安装、沉浸式无效

1、HarmonyOS 如何自定义时间选择器?

可以参考如下demo:

let anmDuration: number = 200;
@Entry
@Component
struct TextPickerExample1 {
  @State firstDate: string = '2024-06-19'
  @State date: string = '2024年06月19号'
  controller: CustomDialogController = new CustomDialogController({
    builder: TextPicker1({
      cancel: (date: string) => {
        this.onCancel(date)
      },
      confirm: (date: string, date1: Date) => {
        this.onAccept(date, date1)
      },
      date: this.firstDate,
    }),
    autoCancel:false,
    cornerRadius: 0,
    customStyle: true,
    alignment: DialogAlignment.BottomEnd
  })

  onCancel(date: string) {

  }

  onAccept(date: string, date1: Date) {
    let year: string = date1.getFullYear().toString();
    let month: string = (date1.getMonth() + 1) < 10 ? ('0' + (date1.getMonth() + 1)).toString() : (date1.getMonth() + 1).toString();
    let day: string = date1.getDate().toString();
    this.date = year + '年' + month + '月' + day + '日'
    this.firstDate = year + '-' + month + '-' + day + '-'
  }

  build() {
    Column() {
      Text(this.date)
      Text('日期').onClick(() => {
        this.controller.open()
      })
    }
  }
}

@CustomDialog
struct TextPicker1 {
  aboutToAppear(): void {
    this.selectedDate = new Date(this.date)
  }

  @State date: string = '2026-08-08'
  controller: CustomDialogController
  //起始年份
  @State startYear: number = 1970
  @State isLunar: boolean = false
  @State showFlag: Visibility = Visibility.Visible;
  @State isAutoCancel: boolean = false;
  @State selectedDate: Date = new Date(this.date)
  cancel?: (date: string) => void
  confirm?: (date: string, date1: Date) => void
  // 延迟关闭弹窗,让自定义的出场动画显示

  @State nowDate: Date = new Date()

  destroy() {
    this.showFlag = Visibility.Hidden
    setTimeout(() => {
      this.controller.close()
    }, anmDuration)
  }

  build() {
    Column() {
      Column() {
        Row() {
          Button('取消', { type: ButtonType.Normal }).backgroundColor(Color.White).fontColor(Color.Gray)
            .onClick(() => {
              if (this.cancel) {
                this.destroy();
                this.cancel(this.date)
              }
            })
          Button('确定', { type: ButtonType.Normal }).backgroundColor(Color.White).fontColor("#fff5b6dd")
            .onClick(() => {
              if (this.confirm) {
                this.destroy();
                this.date = this.nowDate.toString()
                this.confirm(this.date, this.nowDate)
              }
            })
        }.width('100%').justifyContent(FlexAlign.SpaceBetween)

        DatePicker({
          start: new Date('1970-1-1'),
          end: new Date('2100-1-1'),
          selected: this.selectedDate
        })
          .disappearTextStyle({ color: Color.Gray, font: { size: '16fp', weight: FontWeight.Bold } })
          .textStyle({ color: '#ff182431', font: { size: '16', weight: FontWeight.Normal } })
          .selectedTextStyle({ color: "#fff5b6dd", font: { size: '22fp', weight: FontWeight.Regular } })
          .lunar(this.isLunar)
          .onDateChange((value: Date) => {
            this.nowDate = value
            console.info('select current date is: ' + value.toString())
          })
      }
    }.width('100%').backgroundColor(Color.White).visibility(this.showFlag)
    // 定义进场出场转场动画效果
    .transition(TransitionEffect.OPACITY.animation({ duration: anmDuration })
      .combine(TransitionEffect.translate({ y: 100 })))
  }
}
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([])即可。


http://www.kler.cn/a/460009.html

相关文章:

  • 《代码随想录》Day25打卡!
  • 电商项目-基于ElasticSearch实现商品搜索功能(一)
  • 【踩坑记录】uni-app 微信小程序调试不更新问题解决指南
  • 【MySQL基础篇】三、表结构的操作
  • Uncaught ReferenceError: __VUE_HMR_RUNTIME__ is not defined
  • Linux Red Hat 7.9 Server安装GitLab
  • k8s的可观测性
  • Airbnb/Booking 系统设计(high level architecture)
  • java工作流模式、背包模式、适配器工厂模式整合架构,让服务任务编排更便捷
  • 如何在LabVIEW中更好地使用ActiveX控件?
  • JJJ:linux等待队列用法 init_waitqueue_entry
  • Java虚拟机——JVM高级特性与最佳实践
  • 第10章 初等数论
  • python修改ppt中的文字部分及插入图片
  • 【TG\SE二次开发】天工CAD二次开发-c++模板介绍
  • UniApp 路由导航详解
  • 【数据结构】非线性数据结构——图
  • Oracle复合索引规则指南
  • 大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!
  • 【Linux知识】exec命令行详解
  • 关于 覆铜与导线之间间距较小需要增加间距 的解决方法
  • MATLAB语言的计算机基础
  • 自学记录HarmonyOS Next Image API 13:图像处理与传输的开发实践
  • 大数据研究方向有哪些创新点
  • Go中的逃逸分析
  • JS async await fetch 捕获后端500错误详细信息