#tizen
#tizen
Вопрос:
Я создаю носимое приложение с помощью UI Builder в Tizen Studio.
Говорят, что это удобный способ создания пользовательского интерфейса, но это ложь: потому что вам не разрешено вручную редактировать код, который он создает.
Пожалуйста, скажите мне, что есть какой-то способ сделать это.
Более подробно: я хочу иметь небольшой значок и прокручиваемый список ниже с круговым списком имен (список содержит 6 элементов, определенных в UI Builder): https://docs.tizen.org/application/native/guides/ui/efl/wearable/component-circle-genlist /
На этом сайте выше указано, что для Circle Genlist я должен сначала определить обычный Genlist:
genlist = elm_genlist_add(parent);
circle_genlist = eext_circle_object_genlist_add(genlist, surface);
Затем я должен установить политику для прокрутки:
eext_circle_object_genlist_scroller_policy_set(circle_genlist,
ELM_SCROLLER_POLICY_OFF,
ELM_SCROLLER_POLICY_ON);
И тогда я должен включить его:
eext_rotary_object_event_activated_set(circle_genlist, EINA_TRUE);
Конструктор пользовательского интерфейса добавляет эти строки, если я добавляю список имен на панель:
vc->genlist1= elm_genlist_add(vc->box7);
...
vc->circle_object_genlist1= eext_circle_object_genlist_add(vc->genlist1, uib_views_get_instance()->get_window_obj()->circle_surface);
eext_rotary_object_event_activated_set(vc->circle_object_genlist1, EINA_TRUE);
Так что это кажется почти идеальным, но это не устанавливает политику. Не проблема, просто поставьте эту строку там! нет. Вы не можете, потому что следующее действие сохранения / запуска воссоздаст весь пользовательский интерфейс, таким образом, удалит вашу дополнительную строку, и нет известного способа избежать этого. (За исключением создания всего пользовательского интерфейса вручную).
Но! Я мог бы захватить элемент управления при создании представления, и я добавил эти строки:
if(vc2->box7 amp;amp; vc2->circle_object_genlist1) {
eext_circle_object_genlist_scroller_policy_set(vc2->circle_object_genlist1, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON);
Elm_Genlist_Item_Class *title_itc = elm_genlist_item_class_new();
Elm_Genlist_Item_Class *pad_itc = elm_genlist_item_class_new();
title_itc->item_style = "title";
title_itc->func.text_get = _gl_title_text_get;
//title_itc->func.content_get = gl_title_icon_get;
title_itc->func.del = NULL;
pad_itc->item_style = "padding";
pad_itc->func.del = NULL;
elm_genlist_item_prepend(vc2->circle_object_genlist1, title_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_append(vc2->circle_object_genlist1, pad_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
}
Строки под политикой также содержат рекомендации с сайта Tizen, на который дана ссылка выше.
Однако, конечно, есть неизвестные функции, которые необходимо перепроектировать. Мое любимое блюдо — это gl_title_icon_get
. Если вы выполните поиск по этому запросу в Google, то получите ровно 1 результат. (Или теперь 2, потому что я также упоминаю об этом в этом посте.)
И, как вы, возможно, уже выяснили: даже после добавления этих строк эмулятор вообще не отображает Круговую полосу прокрутки сбоку.
Итак, я хочу получить что-то вроде этого:
Но с красивой круговой полосой прокрутки Samsung Gears есть везде (прокрутка только списка имен и оставление значка вверху):
Ответ №1:
Я не специализируюсь в разработке пользовательского интерфейса, но я могу дать вам несколько советов по поводу виджета genlist.
- Политика прокрутки
для кругового списка имен, я думаю, вам нужно включить только политику прокрутки по вертикальной оси.
eext_circle_object_genlist_scroller_policy_set(vc2->circle_object_genlist1, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
// Auto is show scroll bar when the list items can scrollable.
Но, пожалуйста, проверьте, что vc2-> circle_object_genlist1 является правильным объектом.
вы можете распечатать указатель на объект и проверить, совпадает ли он с адресом или нет.
- Заголовок значка
К сожалению, стиль заголовка списка имен содержит только текст. чтобы отобразить значок, вы можете использовать «полный» стиль вместо стиля «заголовок». имя части содержимого — «elm.swallow.content».
в обратном вызове gl_title_icon_get проверьте, что имя детали — «elm.swallow.content», и верните правильное изображение.
таким образом, код будет,
title_itc->item_style = "full";
//title_itc->func.text_get = _gl_title_text_get;
title_itc->func.content_get = gl_title_icon_get;
title_itc->func.del = NULL;
и gl_title_icon_get будет,
static Evas_Object*
gl_title_icon_get(void *data, Evas_Object *obj, const char *part)
{
if (!strcmp(part, "elm.sawllow.content"))
{
Evas_Object *image = elm_image_add(obj);
elm_image_file_set(image, IMG_URL); //image resource url
return image;
}
return NULL;
}
- Добавление заголовка и заполнения
elm_genlist_item_prepend(vc2->circle_object_genlist1, title_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_append(vc2->circle_object_genlist1, pad_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
вы передаете vc2-> circle_object_genlist1 в API genlist, но это должен быть объект genlist, а не circle_genlist, поэтому vc2-> genlist1 является правильным.
elm_genlist_item_prepend(vc2->genlist1, title_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
elm_genlist_item_append(vc2->genlist1, pad_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
пожалуйста, проверьте это, и если у вас есть еще вопросы, пожалуйста, ответьте здесь!
Спасибо.