100个openharmony开源demo:1.日历

news2024/11/15 8:25:58

准备用开发者手机写100个开源的demo不知道能不能实现,日拱一卒,期待蜕变。

第一个demo:日历借鉴了网上的日历算法,自己用arkts写了界面和点击事件,各位可根据此demo写自己的日历选择器等组件。

1.目录结构:

2.主页代码

import common from '@ohos.app.ability.common'
import window from '@ohos.window'

import { DataManager } from '../tools/DataManager'

@Entry
@Component
struct Index {
  currentDate: Date = new Date()
  @State dataManager: DataManager = new DataManager(
    this.currentDate.getFullYear(),
    (this.currentDate.getMonth()+1),
    this.currentDate.getDate()
  )

  private context = getContext(this) as common.UIAbilityContext

  screenWidth: number = 480
  screenHeight: number = 853.33

  aboutToAppear() {
    // 获取屏幕的宽高
    window.getLastWindow(this.context)
      .then((windowClass: window.Window) => {
        let windowProperties = windowClass.getWindowProperties()
        this.screenWidth = px2vp(windowProperties.windowRect.width)
        this.screenHeight = px2vp(windowProperties.windowRect.height)
        this.dataManager.initData()
      })
      .catch((error: Error) => {
        console.error('Failed to obtain the window size. Cause: ' + JSON.stringify(error))
      })
  }

  build() {
    Column() {
      Column() {
        Row(){
          Row(){
            Image($r('app.media.arrow_left_double'))
              .height('60%')
              .margin({left:20})
              .onClick(() => {
                this.dataManager.currentYear = this.dataManager.currentYear - 1
                this.dataManager.initData();
              })
            Image($r('app.media.arrow_left'))
              .height('52%')
              .margin({left:10})
              .onClick(() => {
                if(this.dataManager.currentMonth > 1){
                  this.dataManager.currentMonth = this.dataManager.currentMonth - 1
                }else{
                  this.dataManager.currentYear = this.dataManager.currentYear - 1
                  this.dataManager.currentMonth = 12
                }
                this.dataManager.initData();
              })
          }
          .margin({top:8})
          .width('30%')
          .height(((this.screenWidth-5*8)/7))
          .backgroundColor(0xF7F7F7)

          Text(this.dataManager.currentDateStr)
            .height('100%')
            .fontSize(((this.screenWidth-5*8)/7)/3)
            .fontWeight(FontWeight.Bold)

          Row(){
            Image($r('app.media.arrow_right'))
              .height('52%')
              .margin({right:10})
              .onClick(() => {
                if(this.dataManager.currentMonth < 12){
                  this.dataManager.currentMonth = this.dataManager.currentMonth + 1
                }else{
                  this.dataManager.currentYear = this.dataManager.currentYear + 1
                  this.dataManager.currentMonth = 1
                }
                this.dataManager.initData();
              })
            Image($r('app.media.arrow_right_double'))
              .height('60%')
              .margin({right:20})
              .onClick(() => {
                this.dataManager.currentYear = this.dataManager.currentYear + 1;
                this.dataManager.initData();
              })
          }
          .margin({top:8})
          .width('30%')
          .height(((this.screenWidth-5*8)/7))
          .backgroundColor(0xF7F7F7)
          .justifyContent(FlexAlign.End)
        }
        .width('100%')
        .height(((this.screenWidth-5*8)/7))
        .backgroundColor(0xF7F7F7)
        .justifyContent(FlexAlign.SpaceBetween)

        Grid() {
          ForEach(this.dataManager.week, (day: any) => {
            GridItem() {
              Text(day.text)
                .fontSize(((this.screenWidth-5*8)/7)/3)
                .fontColor(day.fontColor)
                .backgroundColor(day.color)
                .width('100%')
                .height('100%')
                .textAlign(TextAlign.Center)
                .borderRadius(8)
            }
            .height("100%")
          }, day => day.id)
        }
        .columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr 1fr')
        .rowsTemplate('1fr')
        .backgroundColor(0xF7F7F7)
        .columnsGap(5)
        .rowsGap(5)
        .height(((this.screenWidth-5*8)/7))

        Grid() {
          ForEach(this.dataManager.days, (day: any) => {
            GridItem() {
              Column() {
                Text(day.text)
                  .fontSize(((this.screenWidth - 5 * 8) / 7) / 3)
                  .fontColor(day.fontColor)
                  .width('100%')
                  .height('42%')
                  .margin({top:8})
                  .textAlign(TextAlign.Center)
                Text(day.lunarText)
                  .fontSize(((this.screenWidth - 5 * 8) / 7) / 4)
                  .fontColor(day.lunarFontColor)
                  .width('100%')
                  .height('30%')
                  .textAlign(TextAlign.Center)
              }
              .borderRadius(day.borderRadius)
              .backgroundColor(day.color)
              .width('100%')
              .height(((this.screenWidth-5*8)/7))
            }
          }, day => day.id)
        }
        .columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr 1fr')
        .rowsTemplate(this.dataManager.rowsTemplate)
        .columnsGap(5)
        .rowsGap(5)
        .height(((this.screenWidth-5*8)/7)*this.dataManager.rowsTemplateNumber)
        .margin(5)
      }
      .width('100%')
      .height('100%')
      .backgroundColor('0xFFFFFF')
      .borderRadius(8)
    }
    .width('100%')
    .height('100%')
  }
}

3.显示效果

4.卡片显示(每晚00:01刷新)

5.源码地址

九流下半/openharmony_100_projects

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA笔记】IDEA配置本地Maven

文章目录 1 配置本地Maven1.1 Maven下载1.2 Maven安装与配置1.2.1 安装1.2.2 配置1.2.2.1 环境配置1.2.2.2 本地仓库配置 2 IDEA设置本地Maven 1 配置本地Maven 1.1 Maven下载 官网&#xff1a;http://maven.apache.org/下载地址&#xff1a;http://maven.apache.org/downloa…

SinoDB客户端工具dbaccess

类似Oracle的客户端工具sqlplus&#xff0c;Mysql的客户端工具mysql&#xff0c;SinoDB数据库也有自带的命令行客户端工具dbaccess。 dbaccess 识别用户输入&#xff0c;将用户输入的 SQL 语句打包发送给 SinoDB 数据库服务器执行&#xff0c;然后接收服务器的执行结果&#xf…

windows上打开redis服务闪退问题处理

方法1&#xff1a;在windows上面打开redis服务时&#xff0c;弹窗闪退可能是6379端口占用&#xff0c;可以用以下命令查看&#xff1a; netstat -aon | findstr 6379 如果端口被占用可以用这个命令解决&#xff1a; taskkill /f /pid 进程号 方法2&#xff1a; 可以使用…

Java特性之设计模式【装饰器模式】

一、装饰器模式 概述 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中&#xff0c;以…

数据泄露问题怎么解决?迅软DSE加密软件助您守护重要信息

企业信息泄露的危害 企业数据泄露事件不仅给企业带来了经济损失和声誉损害&#xff0c;还可能导致用户个人信息的泄露&#xff0c;引起社会广泛关注。 因此&#xff0c;企业需要采取更加严格的数据保护措施&#xff0c;使用数据加密系统以防范潜在的数据泄露风险。同时&#…

Vue.js前端开发零基础教学(三)

目录 2.6 计算属性 2.7侦听器 2.8 样式绑定 2.8.1 绑定class属性 2.8.2 绑定style属性 2.9 阶段案例——学习计划表 2.6 计算属性 概念&#xff1a;Vue提供了计算属性来描述依赖响应式数据的复杂逻辑。 计算属性可以实时监听数据的变化&#xff0c;返回一个计算…

Premiere模板|200个视频标题文字动画pr字幕模板包

Premiere模板&#xff0c;13个类别200个Pr视频标题字幕文字动画模板mogrt包。 几乎适用于任何场景。粗体标题&#xff0c;标注&#xff0c;未来主义和线条标题&#xff0c;下三分之一&#xff0c;霓虹灯&#xff0c;带数字的标题&#xff0c;倒计时&#xff0c;表格&#xff0c…

智慧商显安卓主板MT8788_联发科MTK平台多媒体广告一体机方案

MT8788高性能智能主板&#xff0c;支持Android 9.0操作系统&#xff0c;支持双屏异显功能;MT8788是基于12nm工艺制程四核A73四核A53架构的八核心CPU,主频高达2.0GHz,拥有超强的通用计算性能。 MT8788主板采用10层二阶超高密度PCB板,集成了4G、百兆以太网、2.4G/5G 双频WiFi、蓝…

C# xaml框架以及Java的ORM介绍

c#有ASP.Net,.NET以及EF Core这几个重要的运行时和框架.分别用于web,应用以及数据库的ORM. 目前跨平台的有Avalonia UI,.Net MAUI以及Uno Platform,至于WPF等本身不是跨平台的,但可以依靠其他库实现跨平台.这里面Avalonia应该是认为bug比较少的. 当然目前最火的跨平台解决方案…

Python使用指定端口进行http请求的例子

使用requests库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class SourcePortAdapter(HTTPAdapter): """"Transport adapter" that allows us to set the source port.""" def __init__(self, port, *args, **kwargs): self.poolm…

Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)

雪崩效应 我们把基础服务故障&#xff0c;导致上层服务故障&#xff0c;并且这个故障不断放大的过程&#xff0c;成为雪崩效应。 雪崩效应&#xff0c;往往是因为服务没有做好容错造成的。 微服务常见容错方案 仓壁模式 比如让controller有自己独立的线程池&#xff0c;线程池满…

数据结构的概念大合集06(树和二叉树)

概念大合集06 1、树1.1 树的相关定义1.2 树的基本运算1.3 树的基本术语1.3.1 结点的度&#xff0c;树的度1.3.2 分支结点&#xff0c;叶子节点1.3.3 路径&#xff0c;路径长度1.3.4 孩子结点&#xff0c;双亲结点&#xff0c;兄弟结点1.3.5 结点层次&#xff0c;树的高度1.3.6 …

24.两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

DELL交换机清空配置S4128T

备份配置 show run | no-more show inventory | no-more show environment | no-more show system brief | no-more -------------- 清除数据 delete startup-config system "sudo -i" //输入密码 rm -rf /config/etc/opt/dell/os10/db_init/startup.xml rm…

基于SpringBoot和Vue的大学生租房系统的设计与实现

今天要和大家聊的是一款今天要和大家聊的是一款基于SpringBoot和Vue的大学生租房系统的设计与实现。 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同…

【Java11下载、安装、部署指南】

oracle jdk11下载 oracle jdk所有版本归档【archive】下载地址&#xff1a; https://www.oracle.com/java/technologies/downloads/archive/ oracle jdk11下载地址&#xff1a; https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 配置或修改wi…

【Python + Django】启动简单的文本页面

前言&#xff1a; 为了应付&#xff08;bushi&#xff09;毕业论文&#xff0c;总要自己亲手搞一个像模像样的项目出来吧 ~ ~ 希望自己能在新的连载中学到项目搭建的知识&#xff0c;这也算是为自己的测试经历增添光彩吧&#xff01;&#xff01;&#xff01; 希望、希望大家…

MySQL 字段定义时的属性设置

开发的时候第一步就是建表&#xff0c;在创建表的时候&#xff0c;我们需要定义表的字段&#xff0c;每个字段都有一些属性&#xff0c;比如说是否为空&#xff0c;是否允许有默认值&#xff0c;是不是逐渐等。 这些约束字段的属性&#xff0c;可以让字段的值更符合我们的预期&…

③【Docker】Docker部署Nginx

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ③【Docker】Docker部署Nginx docker拉取nginx…

【计算机网络篇】物理层(3)编码与调制

文章目录 &#x1f354;编码与调试⭐基本概念 &#x1f354;基本的带通调制方法和混合调制方法⭐基本的带通调制方法⭐混合调制方法 &#x1f354;编码与调试 物理层是OSI模型中的第一层&#xff0c;它负责在物理媒体上传输原始比特流。在物理层的编码和调试中&#xff0c;我们…