Настройка 1текстового элемента в genlist - и получение выделенного сигнала

В ОС Tizen есть хороший стиль genlist 1text. Это создает эффект увеличения в списке, то есть: верхний и нижний элементы меньше, чем средний:

введите здесь описание изображения

И они плавно увеличиваются по мере того, как пользователь перемещает их в середину.

Я хотел настроить стиль элемента списка genlist, поэтому я поискал в Интернете и создал myownlistitem.

Моя цель - сделать текст красным сразу, когда элемент выделен (т.е. перенесен в середину). Чтобы быть уверенным, что программа использует мой макет, я по умолчанию сделал текст фиолетовым:

group { "elm/genlist/item/myownlistitem/default";
  data.item: "texts" "elm.text";

  parts {
      rect { "elm.spacer";
        scale: 1;
        mouse_events: 1;
        desc { "default";
           min: 0 100;
        }            
      } 
      text { "elm.text";
        desc { "default";
            color: 255 0 255 255; // to be purple by default
            text.size: 28;
        }
        desc { "highlighted";
            inherit: "default";
            color: 255 0 0 255; // to be red
        }
      }
  }

  programs {
      program { name: "myownlistitem_highlighted";
         signal: "elm,state,highlighted";
         source: "elm";
         action: STATE_SET "highlighted" 0;
         target: "elm.text"
      }
      program { name: "myownlistitem_unhighlighted";
         signal: "elm,state,unhighlighted";
         source: "elm";
         action: STATE_SET "default";
         target: "elm.text"
      }     
  }
}

Это очень приятно, работает по назначению:

введите здесь описание изображения

Но, как видите, эффект увеличения 1text утерян.

Поэтому я пошел еще дальше и снова изменил класс элементов списка на 1text, а в listItemClass->func.content_get:

Evas_Object* UI::getListItemContent(void* data, Evas_Object* obj, const char* part) {
  Evas_Object* item = elm_layout_add(obj);
  elm_layout_file_set(mylayout.edj, "elm/genlist/item/myownlistitem/default");
  elm_object_part_text_set(item, "elm.text", "Demo");

  return item;
}

Это действительно работает, эффект лупы остался:

введите здесь описание изображения

Но мой макет больше не получает сигналы highlighted и unhighlighted. Я пробовал много вещей из кода C (*_signal_callback_add), но больше не мог получать эти сигналы.

Как я могу получить эти сигналы в своем макете при его применении, чтобы сохранить эффект лупы?


person Daniel    schedule 27.01.2021    source источник
comment
Также попробовал highlighted как событие genlist, но это то же самое, что и selected, которое вызывается только после того, как я щелкнул или коснулся самого элемента.   -  person Daniel    schedule 27.01.2021


Ответы (1)


Эффект лупы, также известный как эффект «Рыбий глаз», предназначен для внутренней функции. он не предназначался для публичного доступа к разработчикам приложений, поэтому у tizen нет официального способа включить / выключить его на стороне пользователя.

но внутри edc есть некоторые данные, которые включают/отключают этот эффект в стилях каждого предмета, которые могут быть изменены в будущем, как я уже сказал, это не официально.

см. 1текстовый стиль,

group { "elm/genlist/item/1text/default";
                                                                                                                                                                                                           
  data.item: "flips" "elm.flip.icon elm.flip.content";
  data.item: "texts" "elm.text";
  data.item: "focus_bg" "on";
  data.item: "contents" "elm.swallow.center_check";
  // 'vi_effect' data can determine fisheye effect.
  // 'on' : enable item resize effect depending on their distance from center position.
  // 'off': disable the effect and item size will not changed by it's position. this is default value.
  data.item: "vi_effect" "on";
  //'highlight_direct' do not use transition at item highlight
  data.item: "highlight_direct" "on";
  //  

vi_effect и highlight_direct data.item — это то, что вам нужно. обычно изменить текст элемента очень легко, используя html-тег в строке текстового блока, но genlist пока не отправляет обратный вызов события выделения, поэтому вы можете применить этот способ.

person Jade Lee    schedule 01.02.2021
comment
Вы хотите сказать, что если я создам свой собственный elm/genlist/item/myown/default стиль предмета и поставлю data.item: "vi_effect" "on";, он будет использовать эффект рыбьего глаза? - person Daniel; 01.02.2021
comment
собственный ответ: НЕТ. если я поставлю vi_effect, он не сделает стиль «рыбий глаз». - person Daniel; 01.02.2021
comment
еще один вопрос - как вы, кажется, здесь единственный, у кого есть ответы: можно ли как-то иметь больше 3-х элементов в genlist (реализовано+отображается)? - person Daniel; 01.02.2021