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

如何将Genlist设置为仅显示模式并移除列表项边框

解决EFL Genlist仅显示模式下移除列表项边框的问题

我之前也踩过这个坑!EFL里Genlist的外观控制有时候会和主题绑定得很深,光靠选择模式的API确实不一定能完全去掉边框——毕竟ELM_OBJECT_SELECT_MODE_NONE只是禁用了选择交互,主题样式可能还在硬渲染边框或者默认的项容器样式。给你几个亲测有效的方案:

方案1:直接修改列表项的Evas对象属性

创建完每个Genlist项后,获取它对应的Evas对象,强制把边框设为0,同时再确认一遍选择和高亮模式:

// 创建Genlist项
Elm_Object_Item *item = elm_genlist_item_append(genlist, NULL, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
// 获取项的Evas对象
Evas_Object *item_obj = elm_object_item_object_get(item);
// 强制设置边框为0
evas_object_border_set(item_obj, 0);
// 再次确认选择模式和高亮模式
elm_object_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_NONE);
elm_genlist_highlight_mode_set(genlist, ELM_GENLIST_HIGHLIGHT_MODE_NONE);

这个方法直接操作底层Evas对象,绕过主题的部分样式控制,大部分情况下都能生效。

方案2:使用主题自带的无边框样式

Elementary的默认主题里有一些预定义的无边框项样式,你可以直接给列表项指定:

elm_genlist_item_style_set(item, "text_only_noborder");

不同的主题可能样式名称不一样,如果这个不行,试试"none"或者"basic_noborder"——你可以查一下当前主题的Edje文件里定义的Genlist项样式。

方案3:自定义主题样式(终极解决方案)

如果上面的方法都不管用,说明主题的样式优先级很高,这时候可以用自定义CSS片段覆盖:

  1. 新建一个CSS文件(比如genlist_custom.css),内容如下:
.genlist .item {
    border-width: 0px;
    background-color: transparent;
    padding: 0px; /* 可选:如果项有默认内边距也可以去掉 */
}
  1. 在你的代码里加载这个自定义样式:
Elm_Theme *theme = elm_theme_get();
elm_theme_extension_add(theme, NULL, "./genlist_custom.css");

这个方法能彻底覆盖主题的默认样式,适合需要完全自定义外观的场景。

为啥你之前的方法没生效?简单说:ELM_OBJECT_SELECT_MODE_NONE只是关掉了选择的交互逻辑,但主题还是会渲染项的默认容器样式(包括边框);elm_genlist_highlight_mode_set控制的是高亮触发的时机(比如悬停/点击),并不是直接移除边框元素。所以必须从Evas对象属性或者主题样式层面入手才能彻底去掉边框。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:22:37