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

У меня есть этот макет в 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.


person Daniel    schedule 10.12.2020    source источник


Ответы (1)


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

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

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

Теперь нам нужно поговорить о подсказке размера align и weight.

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

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

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

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

  1. удалить фиксированный и групповой мин. (я добавляю схему, чтобы проверить, где именно существует объект. Если вы можете использовать свой предыдущий код с удалением фиксированного параметра и группового мин.)

   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);

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

person Jade Lee    schedule 15.12.2020