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

如何在Tizen 5.5/4.0的Genlist中添加无高亮按钮图标?

问题:Tizen圆形Genlist顶部图标按钮始终高亮的解决方法

需求背景

在Tizen 5.5/4.0中实现圆形Genlist,结构为:内边距 → 顶部2个图标按钮 → groupindex → 列表项 → 内边距。已掌握内边距、groupindex、列表项的实现,但图标作为按钮时始终处于高亮状态,需要消除这种高亮。

当前实现方式

通过Genlist的content方式添加图标,代码如下:

auto itc = elm_genlist_item_class_new();
itc->item_style = "full";
itc->func.content_get = getListItem;

Evas_Object* getListItem(void* data, Evas_Object* obj, const char* part) {
  Evas_Object* item = elm_layout_add(obj);
  elm_layout_file_set(...);
  evas_object_show(item);
  return item;
}

布局代码(EDC):

parts {
  image { "elm.icon.create";
    mouse_events: 0;
    desc { "default";
      image.normal: "ic_create.png";
      rel2.relative: 0.5 1;
    }
  }
  image { "elm.icon.settings";
    mouse_events: 0;
    desc { "default";
      image.normal: "ic_settings.png";
      rel1.relative: 0.5 0;
    }
  }
}

解决思路与方案

核心原因

当前使用的Genlist item样式"full"默认会给整个item添加高亮状态(包括内部图标区域),即使设置mouse_events: 0也无法阻止Genlist本身对item的高亮触发。

具体解决步骤

方案1:自定义Genlist Item样式,取消全局高亮

在EDC文件中添加自定义样式,移除item的高亮状态:

styles {
  style "custom_icon_header" {
    base: "default";
    parts {
      part "elm.swallow.content" {
        type: SWALLOW;
        description { state: "default" 0.0; }
        description { state: "selected" 0.0; inherit: "default" 0.0; }
        description { state: "highlighted" 0.0; inherit: "default" 0.0; }
      }
    }
  }
}

代码中指定该自定义样式:

itc->item_style = "custom_icon_header";

方案2:单独处理图标点击,阻止事件冒泡

移除布局中mouse_events: 0的设置,给图标添加点击回调并阻止事件传递到父级Genlist item:

Evas_Object* getListItem(void* data, Evas_Object* obj, const char* part) {
  Evas_Object* layout = elm_layout_add(obj);
  elm_layout_file_set(layout, YOUR_EDC_PATH, "icon_header_layout");
  
  // 处理创建图标点击
  Evas_Object* create_icon = elm_layout_part_content_get(layout, "elm.icon.create");
  evas_object_smart_callback_add(create_icon, "clicked", _create_btn_clicked, data);
  // 阻止事件冒泡到Genlist item
  evas_object_event_callback_add(create_icon, EVAS_CALLBACK_MOUSE_DOWN, [](void *data, Evas *e, Evas_Object *obj, void *event_info) {
    evas_event_feed_mouse_up(e, evas_pointer_button_get(e, obj), EVAS_BUTTON_NONE, evas_time_get(e), NULL);
  }, NULL);
  
  // 处理设置图标点击
  Evas_Object* settings_icon = elm_layout_part_content_get(layout, "elm.icon.settings");
  evas_object_smart_callback_add(settings_icon, "clicked", _settings_btn_clicked, data);
  evas_object_event_callback_add(settings_icon, EVAS_CALLBACK_MOUSE_DOWN, [](void *data, Evas *e, Evas_Object *obj, void *event_info) {
    evas_event_feed_mouse_up(e, evas_pointer_button_get(e, obj), EVAS_BUTTON_NONE, evas_time_get(e), NULL);
  }, NULL);
  
  evas_object_show(layout);
  return layout;
}

方案3:使用Genlist Header替代普通Item

将顶部图标区域作为Genlist的header添加,header默认无高亮状态:

Evas_Object* header_layout = elm_layout_add(genlist);
elm_layout_file_set(header_layout, YOUR_EDC_PATH, "icon_header_layout");
// 添加图标点击事件逻辑
// ...
elm_genlist_header_item_append(genlist, NULL, NULL, NULL, header_layout);

补充说明

参考One UI手表设计规范:图标按钮仅需在点击时提供反馈,避免持续高亮;圆形界面组件应减少不必要的状态高亮干扰视觉体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:45:30