LittlevGL---日曆calendar---7

目的

   學習使用calendar對象的用法。

功能描述

  calendar對象爲當前ui提供的一個日曆描述結構對象。即用戶如果要顯示一個日曆方面的功能,可以在此對象上進行擴展描述。
  用戶可以在此calender設置自己顯示的風格,配置星期、月的別名,也可以配置當前日期,顯示的日期,高亮的日期。配置選擇某個日期時發出時間,或者到達某個日期(日期選中發生LV_EVENT_VALUE_CHANGED事件),則會發生事件,用戶可以在事件響應中擴展自己的功能。

對象創立步驟以及對應函數描述

  用戶使用calendar,需要創建、顯示、配置當前時間、顯示窗口時間、調整自己的week和month的名字,配置對應的事件等。具體如下:
  1. calendar的創建
 lv_obj_t *lv_calendar_create(lv_obj_t *par, constlv_obj_t *copy);
         par:父類;
         copy:參考初始化對象;
  1. 配置當前日期
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. 顯示當前日期
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. 配置高亮日期
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. 配置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. 配置month的別名
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. 其他
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)

案列和代碼

  實現一個案列。代碼如下:
#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);//設置日期名字
}

案列和代碼

  結果:

在這裏插入圖片描述
如果屏蔽掉當前顯示時間,則會
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章