如何实现Elm_entry输入文本及光标居中?解决标记文本丢失问题
解决Elm Entry输入文本及光标居中问题
要实现Elm Entry中输入内容、光标全程居中,同时避免清空后格式丢失的问题,推荐以下两种可靠方案:
方案一:通过样式类全局控制(优先推荐)
放弃依赖内联格式标记,直接给Elm Entry添加自定义样式类,通过CSS/Edje样式强制文本对齐,这种方式不与输入内容绑定,稳定性更高。
- 定义样式(以CSS为例):
.centered-entry { text-align: center; }
- 给Entry应用样式:
// 创建Entry后设置样式 Evas_Object *entry = elm_entry_add(parent); elm_object_style_set(entry, "centered-entry");
这样设置后,不管是指南文本、输入内容还是光标,都会自动居中显示,无需维护内联格式标记,彻底解决清空后格式丢失的问题。
方案二:监听内容变化动态维护格式标记
如果必须使用内联格式标记,可通过监听Entry的changed信号,在内容清空时重新注入格式标记:
- 绑定内容变化回调:
static void entry_content_changed(void *data, Evas_Object *entry, void *event_info) { const char *content = elm_entry_entry_get(entry); // 当内容为空时,重新插入带居中格式的空标记 if (!content || strlen(content) == 0) { elm_entry_entry_set(entry, "<text_class=tizen align=center></>"); // 若需要显示指南文本,同步更新指南文本格式 elm_entry_guide_text_set(entry, "<text_class=tizen align=center>input your text</>"); } } // 创建Entry时绑定回调 evas_object_smart_callback_add(entry, "changed", entry_content_changed, NULL);
原问题原因说明
你之前使用的内联<align=center>标记是与文本内容绑定的,当删除最后一个字符时,格式标记会被一并移除;重新输入时,新内容没有被格式标记包裹,因此默认左对齐。而样式类是控件级别的全局设置,不受内容修改影响,是更优的解决方案。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

