使用RN的kitten框架的日历组件的修改

news2024/9/23 1:38:09

官方网页地址
下面就是我参考官方封装的时间日期组件(主要是功能和使用方法,页面粗略做了下,不好看勿怪)

import React, {useState} from 'react';
import {StyleSheet, View, TouchableOpacity, SafeAreaView} from 'react-native';
import {Calendar, NativeDateService, Text} from '@ui-kitten/components';

// 切换月和日的语言的配置
const i18n = {
  dayNames: {
    short: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], // 设置周几的文字语言
    long: ['1', '2', '3', '4', '5', '6', '7'],
  },
  monthNames: {
    // 设置某月的月份语言
    short: [ // 选中的当前月的展示文字
      'Jan1',
      'Feb2',
      'Mar3',
      'Apr4',
      'May5',
      'Jun6',
      'Jul7',
      'Aug8',
      'Sep9',
      'Oct10',
      'Nov11',
      'Dec12',
    ],
    long: [  // 选择月份的月份列表的文字
      'January1',
      'February2',
      'March3',
      'April4',
      'May5',
      'June6',
      'July7',
      'August8',
      'September9',
      'October10',
      'November11',
      'December12',
    ],
  },
};

// 切换语言的配置
const localeDateService = new NativeDateService('en', {
  i18n,
  startDayOfWeek: 1,
});

const LeftArrow = ({onPress}) => (
  // 设置左侧切换月份的组件样式,默认有个onpress代表切换的时间,直接调用就行
  <TouchableOpacity style={styles.arrow} onPress={onPress}>
    <Text>PREV</Text>
  </TouchableOpacity>
);

const RightArrow = ({onPress}) => (
  // 设置右侧切换月份的组件样式,默认有个onpress代表切换的时间,直接调用就行
  <TouchableOpacity style={styles.arrow} onPress={onPress}>
    <Text>NEXT</Text>
  </TouchableOpacity>
);

const CalendarCustomDayShowcase = () => {
  const [selectedDate, setSelectedDate] = useState(new Date()); // 设置默认选中日期为今天

  const handleSelect = date => {
    // 点击某个日期触发的方法,获取年月日等信息直接使用时间日期api就可以,这里的date本质就是时间对象
    setSelectedDate(date);
  };

  const renderDay = ({date}, style) => {
    // 默认接收两个参数,我这里只需要将第一个参数的时间拿来用,因此我解构了一下
    // 第二个参数就是默认的单元格内容样式,这里有以下注意点,打印下style就知道了
    // 注意点:页面刷新会打印所有单元格的style样式,后面每次点击切换都会打印两次style,第一次打印是离开前的单元格样式,第二次打印是离开后的单元格样式
    console.log(' style', style);

    let container = {}; // 这是我自定义的样式

    // 但是自定义样式完了,我不知道怎么设置当前点击的样式和离开后的样式,以及点击后如果日期是当天还要有的当天的样式
    // 因此我这里使用了一个笨方法,通过官方的样式表去判断当前是什么样式,是什么状态,然后根据这个官方的样式判断我该动态渲染什么样的状态

    // 1.当我点击非当天的时间后,官方样式表给的背景色是rgba开头的,并且当天日期肯定只有一个,因此我使用了判断开头的rgba,又因为刷新页面初始化时有的背景色是undefined,因此这里要判断背景色存在再去渲染
    if (
      style.container.backgroundColor &&
      style.container.backgroundColor.startsWith('rgba')
    ) {
      container = {
        backgroundColor: '#cccccc',
        borderColor: 'black',
        borderRadius: 4,
        borderWidth: 1,
      };
    } else if (style.container.backgroundColor) {
      // 2.点击某个日期,如果当前日期不是当前日期,当点击后这个会有个蓝色背景,也就是代表当前点击的日期样式
      container = {
        backgroundColor: 'blue',
        borderColor: 'black',
        borderRadius: 4,
        borderWidth: 1,
      };
    } else {
      // 3.日期非当天日期,又不是点击的当前日期,也就是剩余的所有日期的颜色值
      container = {
        backgroundColor: 'pink',
        borderColor: 'red',
        borderRadius: 4,
        borderWidth: 1,
      };
    }

    return (
      <View
        style={{
          flexDirection: 'row',
          justifyContent: 'center',
          alignItems: 'center',
          flex: 1, // 定义的块居中显示
        }}>
        <View style={[styles.dayContainer, container]}>
          {/* 显示的日 */}
          <Text style={[styles.dayText]}>{date.getDate()}</Text>
          {/* 底部小圆点 */}
          <View style={styles.dot} />
        </View>
      </View>
    );
  };

  return (
    <SafeAreaView>
      <Calendar
        dateService={localeDateService} // 使用自定义语言的月份和周
        date={selectedDate} // 默认显示的时间
        onSelect={handleSelect} // 设置当前选中的时间
        renderArrowLeft={LeftArrow} // 左边切换月份的按钮
        renderArrowRight={RightArrow} // 右边切换月份的按钮
        renderDay={renderDay} // renderDay 自定义的单元格内容,可以将我们的自定义的单元格样式加入进来覆盖掉原有样式
      />
    </SafeAreaView>
  );
};

const styles = StyleSheet.create({
  arrow: {
    justifyContent: 'center',
    alignItems: 'center',
  },
  dayContainer: {
    justifyContent: 'center',
    alignItems: 'center',
    width: 32,
    height: 32,
  },
  dayText: {
    fontSize: 16,
  },
  selectedDay: {
    backgroundColor: '#3366FF',
    borderRadius: 16,
  },
  selectedDayText: {
    color: '#FFFFFF',
  },
  dot: {
    width: 6,
    height: 6,
    borderRadius: 3,
    backgroundColor: 'red',
    marginTop: 2,
  },
});

export default CalendarCustomDayShowcase;

效果图
在这里插入图片描述
自定义的月份效果(周的效果上图有以及当前月的展示效果)

在这里插入图片描述

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

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

相关文章

运用MongoDB Atlas释放开发者潜能同时把控成本

在当下的商业环境中&#xff0c;不可预测性已经成为常态&#xff0c;工程团队负责人必须在把控不可预测性和优化IT成本的双重挑战下谋求平衡。 咨询公司德勤2024 MarginPLUS调查收集了300多位企业负责人的见解&#xff0c;报告中重点介绍了面对动荡的全球经济环境&#xff0c;…

kubernetes多master集群架构

一、完成master02节点的初始化操作 master02环境准备&#xff0c;详细过程参考上一期博客环境准备 #添加主机映射 vim /etc/hosts 192.168.88.3 master01 192.168.88.8 master02 192.168.88.4 node01 192.168.88.5 node021、准备master02节点需要的文件 从 master01 节点上拷…

数学:矩阵范数的定义、常见的矩阵范数

1 算子范数【从属范数】 1.1 1-算子范数【列和范数】 &#xff1a;即对A的每列的绝对值求和再求其中的最大值 1.2 ∞-算子范数【行和范数】即对 A 的每行的绝对值求和再求其中的最大值 1.3 2-算子范数【谱范数】 学过奇异值分解就知道谱范数是最大奇异值/ 二次型的最大特…

大数据Spark教程从入门到精通第四篇:Spark快速上手

一&#xff1a;Spark快速上手 1&#xff1a;创建Maven项目 idea安装scala_idea scala插件-CSDN博客 代表了我们安装scala的maven环境已经准备好了&#xff0c;代码可以正常跑了

kafka用java收发消息

用java客户端代码来对kafka收发消息 具体代码如下 package com.cool.interesting.kafka;import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; i…

2024042001-计算机网络 - 物理层

计算机网络 - 物理层 计算机网络 - 物理层 通信方式带通调制 通信方式 根据信息在传输线上的传送方向&#xff0c;分为以下三种通信方式&#xff1a; 单工通信&#xff1a;单向传输半双工通信&#xff1a;双向交替传输全双工通信&#xff1a;双向同时传输 带通调制 模拟信号…

程序验证之Dafny--证明霍尔逻辑的半自动化利器

一、What is Dafny?【来自官网介绍 Dafny 】 1)介绍 Dafny 是一种支持验证的编程语言&#xff0c;配备了一个静态程序验证器。 通过将复杂的自动推理与熟悉的编程习语和工具相结合&#xff0c;使开发者能够编写可证明正确的代码&#xff08;相对于 {P}&#xff33;{Q} 这种…

数据结构(C):树的概念和二叉树初见

目录 &#x1f37a;0.前言 1.树概念及结构 2.认识一棵树 3.树的表示 3.1树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 4.二叉树 4.1特殊的二叉树 4.2二叉树的性质 &#x1f48e;5.结束语 &#x1f37a;0.前言 言C之言&#xff0c;聊C之识&…

OpenAI 震撼发布:GPT-4o免费,实时语音视频交互开启新纪元

OpenAI 震撼发布&#xff1a;GPT-4o免费&#xff0c;实时语音视频交互开启新纪元 在仅仅问世17个月后&#xff0c;OpenAI 研制出了仿佛科幻片中登场的超级人工智能——GPT-4o&#xff0c;而且所有人都可以完全免费使用&#xff0c;让这个科技界的巨浪让人震撼无比&#xff01;…

JSP技术

前言&#xff1a;虽然现在Vue盛行&#xff0c;但是对于初学者和一些项目我们还是采用jsp技术来编写前端代码&#xff0c;一些老的项目也需要jsp去维护。就像老师说的法国的银行系统还是采用COBOL这种古老语言。本篇文章主要介绍jsp技术。 目录 一、概述 &#xff08;1&#…

Rust构造JSON和解析JSON

目录 一、Rust构造JSON和解析JSON 二、知识点 serde_json JSON 一、Rust构造JSON和解析JSON 添加依赖项 cargo add serde-json 代码&#xff1a; use serde_json::{Result, Value};fn main() -> Result<()>{//构造json结构 cpu_loadlet data r#"{"…

docker安装minio附带图片

1.拉镜像 docker pull minio/minio 2.创建挂载点目录 mkdir -p /usr/local/minio/config mkdir -p /usr/local/minio/data 3.创建minio容器 docker run \ -p 19000:9000 \ -p 9090:9090 \ --nethost \ --name minio \ -d --restartalways \ -e "MINIO_ACCESS_KEYmini…

【前端】CSS基础(4)

文章目录 前言1、CSS常用属性1.1 文本属性1.1.1 文本对齐1.1.2 文本装饰1.1.3 文本缩进1.1.5 行高 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明&#xff0c;关于CSS的更多讲解以及HTML、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&…

第 397 场 LeetCode 周赛题解

A 两个字符串的排列差 模拟&#xff1a;遍历 s s s 记录各字符出现的位置&#xff0c;然后遍历 t t t 计算排列差 class Solution {public:int findPermutationDifference(string s, string t) {int n s.size();vector<int> loc(26);for (int i 0; i < n; i)loc[s…

一种基于电场连续性的高压MOSFET紧凑模型,用于精确表征电容特性

来源&#xff1a;A Compact Model of High-Voltage MOSFET Based on Electric Field Continuity for Accurate Characterization of Capacitance&#xff08;TED 24年&#xff09; 摘要 本文提出了一种新的高压MOSFET&#xff08;HV MOS&#xff09;紧凑模型&#xff0c;以消…

每天Get一个小技巧:用DolphinScheduler实现隔几天调度

转载自tuoluzhe8521 这篇小短文将教会你如何使用Apache DolphinScheduler实现隔几天调度&#xff0c;有此需求的小伙伴学起来&#xff01; 1 场景分析 DolphinScheduler定时器模块-定时调度时每3秒|每3分钟|每3天这种定时&#xff0c;不能够跨分钟&#xff0c;跨小时&#x…

在做题中学习(59):除自身以为数组的乘积

238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前缀积和后缀积 思路&#xff1a;answer中的每一个元素都是除自己以外所有元素的和。那就处理一个前缀积数组和后缀积数组。 而前缀积(f[i])是&#xff1a;[0,i-1]所有元素的乘积 后缀…

6. 网络编程-网络io与select、poll,epoll

https://0voice.com/uiwebsite/html/courses/v13.7.html 首先看看这个学习计划 网络、网络编程、网络原理基础组件&#xff0c;20个。中间件 Redis ,MySQL&#xff0c;Kafka&#xff0c;RPC&#xff0c;Nginx开源框架&#xff08;解决方案&#xff09;业务开发(工程师开发&am…

【C语言】5.C语言函数(2)

文章目录 7.嵌套调⽤和链式访问7.1 嵌套调⽤7.2 链式访问 8.函数的声明和定义8.1 单个⽂件8.2 多个⽂件8.3 static 和 extern8.3.1 static 修饰局部变量8.3.2 static 修饰全局变量8.3.3 static 修饰函数 7.嵌套调⽤和链式访问 7.1 嵌套调⽤ 嵌套调用就是函数之间的互相调用。…

震撼发布!GPT-4o 上线!

5 月 14日凌晨一点&#xff0c;OpenAI 发布了 GPT-4o&#xff01; 新模型的功能简单概括就是&#xff1a;更快、更智能、更像人类。 秉承着持续更新的态度&#xff0c;Hulu AI 快速接入 GPT-4o 啦&#xff01; 继 5 月份上线 Suno 之后&#xff0c;这次是 Hulu AI 的又一重大…