Edje: как определить группу «фиксированного» размера?

#tizen #tizen-native-app

#tizen #tizen-native-app

Вопрос:

У меня есть этот макет в Edje:

 group { 
  name: "mylayout";
  min: 200 200;
  parts {
     rect { "elm.bg";
        scale: 0;
        desc { "default";
           visible: 1;
           fixed: 1 1;
           color: 255 0 0 255;
           min: 200 200;
        }
     }
     text { "elm.title";
        scale: 0;
        desc { "default";
           text {
              text: "Title";
              size: 32;
           }
        }
     }
  }
}
 

Я хочу поместить 2 из этого макета в поле, но я хочу, чтобы все они были «полноразмерными», то есть мне нужен прокручиваемый блок.

Теперь, если я помещу эти макеты в поле, поле изменит их размер, чтобы они поместились на одном экране.

Если я просто добавлю один в поле:

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

Но если я добавлю два:

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

Я добавляю их в поле с этим кодом:

 Evas_Object* page = elm_layout_add(box);
elm_layout_file_set(page, "file.edj", "mylayout");
evas_object_size_hint_align_set(page, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(page, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show(page);
elm_box_pack_end(box, page);
 

Как я могу заставить поле просто содержать его элементы с их исходным размером?

ОС: Tizen 4.0.

Ответ №1:

https://www.enlightenment.org/develop/legacy/program_guide/edje/basic_concepts

фиксированный параметр означает, что размер этой детали фиксирован, поэтому независимо от глобального размера деталь будет отображаться как ее собственный размер.

таким образом, если вы зададите фиксированный параметр, минимальный размер этой части не повлияет на размер объекта. Я думаю, вам сначала нужно удалить фиксированный параметр.

теперь мы должны поговорить о размере, выравнивании и весе.

подсказка выравнивание означает, где этот объект содержимого должен быть выровнен в данной области. вы можете легко думать, что 0 — это верх / левый, 0,5 — средний, 1,0 — нижний / правый. но предопределенное значение FILL(-1) означает заполнение объекта содержимого в заданной области.

подсказка выравнивание означает, какой вес имеет этот объект в родительской области. таким образом, если в коробке есть два объекта, и один имеет вес 4, а другой равен 6, то первый может иметь только 0,4 площади коробки, а второй может иметь 0,6 площади.

пожалуйста, смотрите более подробную информацию по ссылке.

Вот мой тестовый код.

  1. удалите фиксированный и групповой минимум (я добавляю контур, чтобы проверить, где именно существует объект. если вы можете использовать свой предыдущий код с удалением фиксированного параметра и группы min.)
 
   group {
     name: "mylayout";
     parts {
        rect { "outline";
           desc { "default";
              visible: 1;
              color: 0 0 0 255;
              min: 200 200;
           }
        }
        rect { "elm.bg"
           desc { "default";
              visible: 1;                                                                                                                                                                                     
              color: 255 0 0 255;
              rel.to: "outline";
              rel1.offset: 1 1;
              rel2.offset: -2 -2;
           }
        }
        text { "elm.title";
           scale: 0;
           desc { "default";
              text {
                 text: "Title";
                 size: 32;
              }
           }
        }
     }
   }
 
  1. Установите выравнивание и вес столько, сколько я захочу. Расширение является синонимом 1.
 
   Evas_Object *win, *bx;
   char buf[PATH_MAX];
                                                                                                                                                                                                              
   win = elm_win_util_standard_add("box-vert", "Box Vert");
   elm_win_autodel_set(win, EINA_TRUE);
   
   bx = elm_box_add(win);
   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
   elm_win_resize_object_add(win, bx);
   evas_object_show(bx);
   
   Evas_Object* ly = elm_layout_add(bx);
   
   snprintf(buf, sizeof(buf), "%s/objects/test.edj", elm_app_data_dir_get());
   elm_layout_file_set(ly, buf, "mylayout");
   
   evas_object_size_hint_align_set(ly, 0.5, 0.5);
   evas_object_size_hint_weight_set(ly, 1, 1);
   evas_object_show(ly);
   elm_box_pack_end(bx, ly);
   
   Evas_Object* ly2 = elm_layout_add(bx);
   
   elm_layout_file_set(ly2, buf, "mylayout");
   
   evas_object_size_hint_align_set(ly2, 0.5, 0.5);
   evas_object_size_hint_weight_set(ly2, 1, 1);
   evas_object_show(ly2);
   elm_box_pack_end(bx, ly2);
   
   
   evas_object_show(win);
   evas_object_resize(win, 360, 360);

 

Если у вас есть еще вопросы, пожалуйста, ответьте здесь! 🙂