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

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

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;

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go微服务: 日志系统ELK核心架构设计

微服务日志系统建设 1 &#xff09;为什么需要日志系统 业务发展越来越庞大&#xff0c;服务器越来越多各种访问日志&#xff0c;应用日志&#xff0c;错误日志量越来越多&#xff0c;无法管理开发人员排查问题&#xff0c;需要到服务器上查日志 2 &#xff09;Elastic Stack…

文件系统和软硬连接

一、磁盘 磁盘可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。因此磁盘是一种永久性存储介质&#xff0c;在计算机中&#xff0c;磁盘是一个外设&#xff0c;也是唯一的机械设备。既然磁盘是一个外设&#xff0c;那么就意味着&#xff0c;磁盘和内存&…

Linux无root配置Node,安装nvm

1. 安装NVM&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash # 或者&#xff0c;如果你使用wget wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 对于bash用户&#xff0c;可以运行&…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.6讲 GPIO中断实验-GPIO驱动添加中断处理函数

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Weblogic 管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)

1 漏洞概述 Weblogic Pre-Auth Remote Command Execution 漏洞&#xff08;CVE-2020-14882, CVE-2020-14883&#xff09;是针对 Oracle WebLogic Server 的两个安全漏洞。CVE-2020-14882 允许远程用户绕过管理员控制台组件中的身份验证&#xff0c;而 CVE-2020-14883 则允许经…

基于springboot+vue+Mysql的大学生社团活动平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Web应用开发中查找慢SQL的方法

每条SQL语句在执行时都需要消耗一定的I/O资源&#xff0c;SQL语句执行的快慢直接决定了硬件资源被占用时长的长短&#xff0c;慢SQL一般指查询很慢的SQL语句。在MySQL数据库中&#xff0c;可以通过慢查询来查看所有执行超时的SQL语句。在默认情况下&#xff0c;一般慢SQL是关闭…

基于NIOS-II软核流水灯和串口通信实现

文章目录 一、创建工程二、系统设计1. 在 “component library” 标签栏中找到 “Nios II Processor” 后点击 Add2. 在 ”Component Library” 标签栏中的查找窗口输入 jtag 找到 ”JTAG UART ”&#xff0c;然后点击 Add3. 添加片上存储器 On-Chip Memory(RAM)核4. 查找窗口输…

Keil手动安装编译器V5版本

V5编译器下载&#xff1a;免积分下载 新版的keil不会自动帮你安装V5版本的编译器&#xff0c;但是很多教程很多比赛所用单片机都是V5的编译器&#xff0c;所以用来开以前的或者开源的很多东西编译直接一大堆报错。 吐槽说完了接下来教你怎么解决 打开installer&#xff08;在…

springboot+vue+mybatis物业管理系统+PPT+论文+讲解+售后

快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;通过线上物业管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方便的生活…

软件压力测试怎么做

随着信息技术的迅猛发展&#xff0c;软件在各行各业的应用越来越广泛&#xff0c;其稳定性、可靠性和性能表现也受到了越来越多的关注。在这样的背景下&#xff0c;软件压力测试显得尤为重要。本文将详细介绍软件压力测试的概念、目的、方法以及实施步骤&#xff0c;帮助读者更…

「JavaEE」多线程案例1:单例模式阻塞队列

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;JavaEE &#x1f387;欢迎点赞收藏加关注哦&#xff01; 多线程案例分析 &#x1f349;单例模式&#x1f34c;饿汉模式&#x1f34c;懒汉模式&#x1f34c;指令重排序 &#x1f349;阻塞队列&a…

eMMC和SD模式速率介绍

概述 在实际项目开发中我们常见的问题是有人会问,“当前项目eMMC、SD所使用模式是什么? 速率是多少?”。这些和eMMC、SD的协议中要求的,要符合协议。接下来整理几张图来介绍。 eMMC 模式介绍 一般情况下我们项目中都是会支持到HS400 8bit 1.8V,最大时钟频率为200MHZ,通…

Idea入门:一分钟创建一个Java工程

一&#xff0c;新建一个Java工程 1&#xff0c;启动Idea后&#xff0c;选择 [New Project] 2&#xff0c;完善工程信息 填写工程名称&#xff0c;根据实际用途取有意义的英文名称选择Java语言&#xff0c;可以看到还支持Kotlin、Javascript等语言选择包管理和项目构建工具Mav…

十款开源数据集成工具

在大数据作业开发中&#xff0c;数据集成工具是非常重要的一个环节&#xff0c;一个好的数据集成系统从可用性、架构扩展性、底层引擎选型、数据源支持能力等方面都需要一定的考量&#xff0c;在本文中汇总了十款开源的数据集成系统&#xff0c;作者本人在过往的开发过程中&…

【记录】docker笔记(五):Docker网络-Network Namespace

Docker 网络理论基础 要了解docker网络&#xff0c;先了解如下基础概念。 Network Namespace Docker 网络的底层原理是 Linux 的 Network Namespace &#xff0c;所以对于 Linux Network Namespace 的理解对 Docker 网络底层原理的理解非常重要。 简介 Network Name…

LeetCode328奇偶链表

题目描述 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。第一个节点的索引被认为是 奇数 &#xff0c; 第二个节点的索引为 偶数 &#xff0c;以此类推。请注意&#xff0c;偶数组和奇数组…

node.js的Express框架的介绍 与 安装详细教程

一、Express框架介绍 &#xff08;1&#xff09;Express定义&#xff1a; Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用&#xff0c;和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 &#xff08…

DDoS防护的市场需求将不断增长,DDoS高防IP显得各位重要

分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种恶意攻击&#xff0c;它借助于客户/服务器技术&#xff0c;将多个计算机联合起来作为攻击平台&#xff0c;对一个或多个目标发动DDoS攻击&#xff0c;从而成倍地提高拒绝服务攻击的为例。DDoS攻击通过大量合法的请求占用大…

19个测试⽤例⽣成的AI⼯具!卷起来!

在不断发展的软件开发领域中&#xff0c;确保应⽤程序的可靠性和功能性⾄关重要。 随着软件系统复杂性的增加&#xff0c;有效测试⽅法的需求也在上升。 传统的测试⽤例⽣成⽅法通常⽆法满⾜快速开发周期和复杂代码库的需求。 随着进⼊⼈⼯智能&#xff08;AI&#xff09;时…