Toast 提示¶
当前实现更新¶
以下说明以当前代码实现为准:
Toast 必须在
egui_toast_init(self, core)/egui_toast_std_init(self, core)时直接带上目标coreegui_toast_set_as_default(self)、egui_toast_show(self, text)、egui_toast_show_info(self, text)都只使用对象自身在 init 时保存的coreegui_view_show_toast_info(...)、egui_page_base_show_toast_info(...)、egui_activity_show_toast_info(...)、egui_dialog_show_toast_info(...)也只依赖对象自己已经绑定好的core
bind_core 相关旧接口已经删除,多屏场景下应从初始化开始就把对象构造在正确屏幕上。
Toast 是 EmbeddedGUI 中的轻量级提示组件,用于在屏幕底部短暂显示一条文本信息,一段时间后自动消失。
基本用法¶
最简单的使用方式,一行代码即可显示提示:
egui_toast_show_info((egui_toast_t *)&toast, "Hello World");
前提是已经初始化并注册了 Toast 实例(通常在 uicode_disp0_init 中完成)。
初始化¶
EmbeddedGUI 提供了标准 Toast 实现 egui_toast_std_t,初始化流程:
static egui_toast_std_t toast;
void uicode_disp0_init(egui_core_t *core)
{
// 初始化标准 Toast
egui_toast_std_init((egui_toast_t *)&toast, core);
// 基于 Toast 初始化时绑定的 core 设为默认 Toast
egui_toast_set_as_default((egui_toast_t *)&toast);
}
核心 API¶
// 注册/清理默认 Toast
void egui_toast_set_as_default(egui_toast_t *self);
void egui_toast_clear_as_default(egui_toast_t *self);
// 直接操作 Toast 实例
void egui_toast_show(egui_toast_t *self, const char *text);
void egui_toast_show_info(egui_toast_t *self, const char *text);
void egui_toast_show_info_with_duration(egui_toast_t *self, const char *text, uint16_t duration);
// 通过已绑定 core 的对象快捷显示 Toast
void egui_view_show_toast_info(egui_view_t *self, const char *text);
void egui_page_base_show_toast_info(egui_page_base_t *self, const char *text);
void egui_activity_show_toast_info(egui_activity_t *self, const char *text);
void egui_dialog_show_toast_info(egui_dialog_t *self, const char *text);
// 设置显示持续时间(毫秒)
void egui_toast_set_duration(egui_toast_t *self, uint16_t duration);
char *egui_toast_get_str_buf(egui_toast_t *self);
持续时间配置¶
默认显示时间为 1000ms(1 秒),可通过两种方式修改:
// 方式 1:运行时修改
egui_toast_set_duration((egui_toast_t *)&toast, 2000); // 2 秒
// 方式 2:编译时修改默认值(在 app_egui_config.h 中)
#define EGUI_CONFIG_PARAM_TOAST_DEFAULT_SHOW_TIME 2000
Toast 内部使用 egui_timer_t 实现自动隐藏,到时间后调用 on_hide 回调。
格式化文本¶
如果需要显示动态内容,可以借助 Toast 内置的字符串缓冲区:
char *p_str = egui_toast_get_str_buf((egui_toast_t *)&toast);
egui_api_sprintf(p_str, "Page %d loaded", page_index);
egui_toast_show_info((egui_toast_t *)&toast, p_str);
标准 Toast (egui_toast_std_t) 提供了 100 字节的内置缓冲区。
标准 Toast 样式¶
egui_toast_std_t 的默认样式:
位置:屏幕底部居中,距底边 20 像素
背景:黑色半透明圆角矩形(alpha=50%,圆角半径 30)
文字:白色,使用默认字体,居中对齐
内边距:左右 10px,上下 5px
宽度:根据文本内容自适应
自定义 Toast¶
如需自定义样式,可以继承 egui_toast_t 并重写虚函数:
struct egui_toast_api
{
void (*on_show)(egui_toast_t *self, const char *text); // 显示时回调
void (*on_hide)(egui_toast_t *self); // 隐藏时回调
char *(*get_str_buf)(egui_toast_t *self); // 获取字符串缓冲区
};
参考 src/app/egui_toast_std.c 中的实现。
相关文件¶
src/app/egui_toast.h- Toast 基类定义src/app/egui_toast.c- Toast 基类实现src/app/egui_toast_std.h- 标准 Toast 定义src/app/egui_toast_std.c- 标准 Toast 实现
Core 解析说明¶
在常规单屏流程下,egui_toast_set_as_default(self)、
egui_toast_show(self, text) 和 egui_toast_show_info(self, text) 等对象式入口,
当前实现中要求 Toast 在初始化时直接带上目标 core,这里不再自动绑定。
对于 egui_view_show_toast_info(...)、egui_page_base_show_toast_info(...)、
egui_activity_show_toast_info(...)、egui_dialog_show_toast_info(...)
这类对象式 helper,则会优先使用对象自己已经绑定的 core:
view直接使用view->corepage/activity/dialog优先使用各自root_view已绑定的core
因此在单屏常规流程下,只要对象在初始化时已经带上正确的 core,
这些 helper 就不需要再额外传入 core 参数,也不依赖当前 active core。
只有在多屏场景下、需要操作不同屏幕对象时,
才需要从一开始就用目标屏幕的 core 去初始化对应对象。