LittlevGL --- calendar calendar --- 7

purpose

   学习使用calendar对象的用法。

Functional Description

  calendar对象为当前ui提供的一个日历描述结构对象。即用户如果要显示一个日历方面的功能,可以在此对象上进行扩展描述。
  用户可以在此calender设置自己显示的风格,配置星期、月的别名,也可以配置当前日期,显示的日期,高亮的日期。配置选择某个日期时发出时间,或者到达某个日期(日期选中发生LV_EVENT_VALUE_CHANGED事件),则会发生事件,用户可以在事件响应中扩展自己的功能。

Object creation step, and the corresponding function is described

  用户使用calendar,需要创建、显示、配置当前时间、显示窗口时间、调整自己的week和month的名字,配置对应的事件等。具体如下:
  1. Create calendar
 lv_obj_t *lv_calendar_create(lv_obj_t *par, constlv_obj_t *copy);
         par:父类;
         copy:参考初始化对象;
  1. Configure the current date
void lv_calendar_set_today_date(lv_obj_t *calendar, lv_calendar_date_t *today)
calendar:被操作对象
today:要选中的日期
lv_calendar_date_t *lv_calendar_get_today_date(constlv_obj_t *calendar)//获取当前时间
lv_calendar_date_t *lv_calendar_get_pressed_date(constlv_obj_t *calendar)//获取选择时间
  1. Displays the current date
void lv_calendar_set_showed_date(lv_obj_t *calendar, lv_calendar_date_t *showed)//配置当前要显示窗口时间
calendar:要操作的对象
showed:要显示的日期
lv_calendar_date_t *lv_calendar_get_showed_date(constlv_obj_t *calendar)//获取显示时间

  1. Configuring highlight Date
void lv_calendar_set_highlighted_dates(lv_obj_t *calendar, lv_calendar_date_t *highlighted, uint16_t date_num);
highlighted:要高亮的日期数组
date_num:即highlighted多少个要高亮的日期,和highlighted有效个数相同
lv_calendar_date_t *lv_calendar_get_highlighted_dates(constlv_obj_t *calendar)//获取高亮时间
uint16_t lv_calendar_get_highlighted_dates_num(constlv_obj_t *calendar)//获取高亮的日期个数
  1. Alias ​​configuration week
void lv_calendar_set_month_names(lv_obj_t *calendar, const char **day_names)
names:要配置的week名字
names指向的内容不能为局部变量,因为会被释放掉,因此一般用全局,静态等表示
如const char * days[12] = {"Jan", "Feb", ...}
const char **lv_calendar_get_day_names(constlv_obj_t *calendar)//获取week别名
  1. Configuring month alias
void lv_calendar_set_month_names(lv_obj_t *calendar, const char **day_names)
这里的day_names定义如下const char * days[12] = {"Jan", "Feb", ...}
const char **lv_calendar_get_month_names(constlv_obj_t *calendar)//获取month别名
  1. other
void lv_calendar_set_style(lv_obj_t *calendar, lv_calendar_style_ttype, const lv_style_t *style)//风格
const lv_style_t *lv_calendar_get_style(constlv_obj_t *calendar, lv_calendar_style_ttype)

Case columns and code

  实现一个案列。代码如下:
#include "ljy_calendar.h"

#include "lvgl/lvgl.h"

#include <stdio.h>



#include "lvgl/lvgl.h"

static void CalendarEventCb(lv_obj_t * obj, lv_event_t event)
{
   // 如果是值发生改变,即有按键选中,这里指有数值选中
   	if(event == LV_EVENT_VALUE_CHANGED){
		//获取按下的日期
        lv_calendar_date_t * date = lv_calendar_get_pressed_date(obj);
        if(date) {
      
            printf("choice date %d/%d/%d\n",date->year,date->month,date->day);
        }
    }else if(event == LV_EVENT_CLICKED){//点击事件
    	printf("toggle months!!\n");

	}
}
const char * w_days[7] = { "w7", "w1","w2","w3","w4","w5","w6" };//month和week的名字描述必须用全局或者静态或者堆中分配的空间描述,局部会释放
void DrawCalendar(void)
{
	//1. 创建calendar
    lv_obj_t  * calendar = lv_calendar_create(lv_scr_act(), NULL);
    lv_obj_set_size(calendar, 230, 230);//设置大小
    lv_obj_align(calendar, NULL, LV_ALIGN_CENTER, 0, 0);//设置其显示方式,对其父类中间
    lv_obj_set_event_cb(calendar, CalendarEventCb);//配置事件回调函数


  	//2. 设置当前时间
    lv_calendar_date_t today;
    today.year = 2019;
    today.month = 9;
    today.day = 23;

    lv_calendar_set_today_date(calendar, &today);

	//设置显示的时间
    lv_calendar_set_showed_date(calendar, &today);//如果不配置此功能,则显示为默认的一个窗口

    /*4. 高亮3个对象*/
    static lv_calendar_date_t highlihted_days[3];       /*Only it's pointer will be saved so should be static*/
    highlihted_days[0].year = 2019;
    highlihted_days[0].month = 9;
    highlihted_days[0].day = 21;

    highlihted_days[1].year = 2019;
    highlihted_days[1].month = 9;
    highlihted_days[1].day = 24;

    highlihted_days[2].year = 2019;
    highlihted_days[2].month = 9;
    highlihted_days[2].day = 22;

    lv_calendar_set_highlighted_dates(calendar, highlihted_days, 3);//高亮

	//获取当前时间
	lv_calendar_date_t *t_today = lv_calendar_get_today_date(calendar);
	printf("current date is %d/%d/%d\n",t_today->year,t_today->month,t_today->day);

	//给星期取名字
	lv_calendar_set_day_names(calendar, w_days);//设置日期名字
}

Case columns and code

  结果:

Here Insert Picture Description
If you block out the current time is displayed, it will
Here Insert Picture Description

Published 17 original articles · won praise 5 · Views 5627

Guess you like

Origin blog.csdn.net/weixin_43854435/article/details/101218625