Tizen: использование кругового списка

#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.

  1. Политика прокрутки

для кругового списка имен, я думаю, вам нужно включить только политику прокрутки по вертикальной оси.

 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 является правильным объектом.
вы можете распечатать указатель на объект и проверить, совпадает ли он с адресом или нет.

  1. Заголовок значка

К сожалению, стиль заголовка списка имен содержит только текст. чтобы отобразить значок, вы можете использовать «полный» стиль вместо стиля «заголовок». имя части содержимого — «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;
}
 
  1. Добавление заголовка и заполнения
  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);
 

пожалуйста, проверьте это, и если у вас есть еще вопросы, пожалуйста, ответьте здесь!
Спасибо.