You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Elm_entry输入文本及光标居中?解决标记文本丢失问题

解决Elm Entry输入文本及光标居中问题

要实现Elm Entry中输入内容、光标全程居中,同时避免清空后格式丢失的问题,推荐以下两种可靠方案:

方案一:通过样式类全局控制(优先推荐)

放弃依赖内联格式标记,直接给Elm Entry添加自定义样式类,通过CSS/Edje样式强制文本对齐,这种方式不与输入内容绑定,稳定性更高。

  1. 定义样式(以CSS为例):
.centered-entry {
    text-align: center;
}
  1. 给Entry应用样式:
// 创建Entry后设置样式
Evas_Object *entry = elm_entry_add(parent);
elm_object_style_set(entry, "centered-entry");

这样设置后,不管是指南文本、输入内容还是光标,都会自动居中显示,无需维护内联格式标记,彻底解决清空后格式丢失的问题。

方案二:监听内容变化动态维护格式标记

如果必须使用内联格式标记,可通过监听Entry的changed信号,在内容清空时重新注入格式标记:

  1. 绑定内容变化回调:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:35:18