You can create your implementation like below
static lv_obj_t * dialog_parent;
static lv_obj_t * dialog_window;
static lv_obj_t * dialog_panel;
static lv_obj_t * dialog_title;
static lv_obj_t * dialog_message;
static lv_obj_t * dialog_close;
static lv_obj_t * dialog_close_label;
void show_dialog(const char * title, const char * message)
{
lv_disp_t * display = lv_display_get_default();
lv_obj_t * active_screen = lv_display_get_screen_active(display);
/* attach the dialog window to current active screen */
lv_obj_set_parent(dialog_window, active_screen);
lv_label_set_text(dialog_title, title);
lv_label_set_text(dialog_message, message);
lv_obj_remove_flag(dialog_window, LV_OBJ_FLAG_HIDDEN); /* show the dialog */
lv_obj_scroll_to_y(dialog_window, 0, LV_ANIM_ON);
}
static void dialog_close_event_cb(lv_event_t * e)
{
lv_obj_add_flag(dialog_window, LV_OBJ_FLAG_HIDDEN);
}
static void create_dialog_window()
{
dialog_parent = lv_obj_create(NULL);
dialog_window = lv_obj_create(dialog_parent);
lv_obj_set_width(dialog_window, lv_pct(100));
lv_obj_set_height(dialog_window, lv_pct(100));
lv_obj_set_align(dialog_window, LV_ALIGN_CENTER);
lv_obj_set_scrollbar_mode(dialog_window, LV_SCROLLBAR_MODE_OFF);
lv_obj_add_flag(dialog_window, LV_OBJ_FLAG_HIDDEN);
lv_obj_remove_flag(dialog_window, LV_OBJ_FLAG_GESTURE_BUBBLE); /* block gesture events when active */
lv_obj_set_scroll_dir(dialog_window, LV_DIR_VER);
lv_obj_set_style_radius(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(dialog_window, lv_color_hex(0x555555), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(dialog_window, 150, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(dialog_window, 60, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_panel = lv_obj_create(dialog_window);
lv_obj_set_width(dialog_panel, 167);
lv_obj_set_height(dialog_panel, LV_SIZE_CONTENT);
lv_obj_set_x(dialog_panel, 0);
lv_obj_set_y(dialog_panel, 60);
lv_obj_set_align(dialog_panel, LV_ALIGN_TOP_MID);
lv_obj_set_flex_flow(dialog_panel, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_align(dialog_panel, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
lv_obj_remove_flag(dialog_panel, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_bg_color(dialog_panel, lv_color_hex(0x080404), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(dialog_panel, 235, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_color(dialog_panel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(dialog_panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(dialog_panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(dialog_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(dialog_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(dialog_panel, 8, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(dialog_panel, 8, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_title = lv_label_create(dialog_panel);
lv_obj_set_width(dialog_title, 140);
lv_obj_set_height(dialog_title, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_title, LV_ALIGN_TOP_MID);
lv_label_set_long_mode(dialog_title, LV_LABEL_LONG_SCROLL_CIRCULAR);
lv_label_set_text(dialog_title, "Title");
lv_obj_set_style_text_align(dialog_title, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(dialog_title, &lv_font_montserrat_16, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_color(dialog_title, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(dialog_title, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(dialog_title, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_side(dialog_title, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(dialog_title, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(dialog_title, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(dialog_title, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(dialog_title, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_message = lv_label_create(dialog_panel);
lv_obj_set_width(dialog_message, 140);
lv_obj_set_height(dialog_message, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_message, LV_ALIGN_CENTER);
lv_label_set_text(dialog_message, "Dialog message");
lv_obj_set_style_text_font(dialog_message, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_close = lv_button_create(dialog_panel);
lv_obj_set_width(dialog_close, 100);
lv_obj_set_height(dialog_close, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_close, LV_ALIGN_BOTTOM_MID);
lv_obj_add_flag(dialog_close, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
lv_obj_remove_flag(dialog_close, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_radius(dialog_close, 20, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_close_label = lv_label_create(dialog_close);
lv_obj_set_width(dialog_close_label, LV_SIZE_CONTENT);
lv_obj_set_height(dialog_close_label, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_close_label, LV_ALIGN_CENTER);
lv_label_set_text(dialog_close_label, "Close");
lv_obj_set_style_text_font(dialog_close_label, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_add_event_cb(dialog_close, dialog_close_event_cb, LV_EVENT_CLICKED, NULL);
}
Create the dialog once with create_dialog_window()
, then you can call show_dialog("title", "message")
to show the dialog