0

我正在尝试为 Tizen 平台编写一个小部件。小部件的布局在 EDC 文件中描述。我需要一个包含一些文本和图像部分的块,用不同的文本标签重复三次。所以我决定我需要创建一个group带有所需部分的组件并将其用作item部分box

group {
    name: "list_item";

    parts {
        part {
            name: "label1";
            type: "TEXT";

            description { ...  }
        }

        part {
            name: "label2";
            type: "TEXT";

            description { ... }
        }
    }
}

group {
    name: "content";

    parts {
        part {
            name: "list";
            type: "BOX";

            box {
                items {
                    item {
                        type: "GROUP";
                        name: "item1";
                        source: "list_item";
                    }

                    item {
                        type: "GROUP";
                        name: "item2";
                        source: "list_item";
                    }

                    item {
                        type: "GROUP";
                        name: "item3";
                        source: "list_item";
                    }
                }
            }

            description { ... }
        }
    }
}

对于放置在主要布局组中的静态文本部分,content我使用elm_object_part_text_set(wid->content, part_name, text)(语言是 C,顺便说一句),但不知道如何设置label1每个实例的部分文本list_item

4

2 回答 2

1

用燕子代替组怎么样?

使用 EDC 创建复杂布局时,可以使用燕子轻松实现。

在 c 代码中,您可以设置 elm_label 以吞下内容。

并且还可以在盒子里添加2个elm_labels后设置内容吞掉盒子

或者您可以创建一个更复杂的布局并将布局设置为燕子的内容。(比如你的组“list_item”)。

在 EDC 中:

   group { "list";
      parts {
         swallow { "item1";
            desc { "default";
                ...
            }
         }
         swallow { "item2";
            desc { "default";
                ...
            }
         }
         swallow { "item3";
            desc { "default";
                ...
            }
         }
      }
   }

在 C 代码中:

/* ex 1 */
elm_object_part_content_set(layout, "item1", label1);
elm_object_part_content_set(layout, "item2", label2);
elm_object_part_content_set(layout, "item2", label3);

/* ex */
elm_box_pack_end(box, label1);
elm_box_pack_end(box, label2);
elm_object_part_content_set(layout, "item1", box);

/* ex 3 */
elm_object_part_text_set(list_item, "label1", "Text 1 ...");
elm_object_part_text_set(list_item, "label2", "Text 2 ...");
elm_object_part_content_set(layout, "item1", list_item);
于 2021-03-12T04:07:00.407 回答
0

我找到了解决方案。我不确定它是否正确,但它确实有效。

// widget_instance_data_s *widget_instance
// Get part by name as object
Evas_Object *evas_list = (Evas_Object*) edje_object_part_object_get(elm_layout_edje_get(widget_instance->content), "list");
// Get items of box
Eina_List *items = evas_object_box_children_get(evas_list);
int items_count = eina_list_count(items);

for (i = 0; i < items_count; i++) {
    list_item = (Evas_Object *) eina_list_nth(items, i);
    // item1, item2, ...
    item_name = evas_object_name_get(list_item);
    ...
    edje_object_part_text_set(list_item, "label1", str);
}
于 2021-03-13T08:31:05.847 回答