![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 40
|
Здравствуйте.
package { import mx.controls.Button; import spark.components.Group; import spark.layouts.HorizontalLayout; public class MyGroup extends Group { public function MyGroup() { super(); var horizontalLayout:HorizontalLayout = new HorizontalLayout(); horizontalLayout.horizontalAlign = "center"; this.layout = horizontalLayout; this.addElement(new Button); } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); myFunction(); } } } Они выстраиваются горизонтально, т.е. на экране 3 Button обернутые в каждый в свою группу. Теперь вручную, при помощи метода myFunction(); меняю координаты X у групп так, что первая группа и третья сместились ко второй, например, на 20. Суть в том, что теперь ширину группы можно сократить на 40. Если просто присвоить this.width = this.width - 40, то т.к. horizontalLayout с "центровкой", то он пересчитает координаты по своему. И переместит группы не так как нужно мне (не так как я задал координаты группам). Как грамотно изменить ширину группы, чтобы остались мною заданные координаты? |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 40
|
Изначально это выглядит так:
Используя MyFunction(), преображается к такому виду: Код одного элемента: <classes:TreeGroup id="v_conteiner0" typeLayout="vertical" x="{this.width/2 - v_conteiner0.width/2}" y="80"> <classes:TreeGroup id="gp_relative0" x="{v_conteiner0.width/2-gp_relative0.width/2}" height="36"> <classes:RelativeButton id="relative0" typeLayout="basic" x="0" y="0" width="108" height="36" skinClass="{SkinRelativeButton}" click="openForm(event)"/> </classes:TreeGroup> <classes:TreeGroup id="h_conteiner0" typeLayout="horizontal"/> </classes:TreeGroup> Цель сократить пространство, занимаемое деревом, за счет смещения "одиночек" - элементы A1, A3 и Ребенок3 в данном примере. HorizontalLayout очень хорошо работает. Когда добавляю элементы, удаляю, то ширина групп v_conteiner0, h_conteiner0 автоматически меняется. Мне так же необходимо самому вычислять новые координаты Х каждого v_conteiner0 (именно их двигаю), когда возникает в этом необходимость. Но как только меняю в TreeGroup ширину, то начинается беда: при добавлении и удалении элементов, автоматического изменения ширины не происходит, хотя HorizontalLayout как был так и остается. Вопрос как мне менять ширину, чтобы не "сбивать" работу HorizontalLayout? Или если это невозможно, то видимо писать свой Layout? Но решит ли этот вариант поставленную задачу? Подскажите, как выйти из этой ситуации победителем ![]() |
|
|||||
|
Либо вы меняете ширину группы и layout располагает элементы с учетом изменившихся размеров, либо вы расставляете элементы самостоятельно (BasicLayout). Третьего не дано.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 40
|
Я правильно понимаю, что выбрав второй вариант (BasicLayout), на меня ложится изменение ширины групп, при добавлении и удалении элементов?
|
|
|||||
|
Регистрация: Mar 2012
Сообщений: 40
|
Тогда насущный вопрос:
На второй картинке мне нужно будет уменьшить ширину на ширину 2х элементов. А в этом примере, же на 1 ширину элемента: Вопрос: как я узнаю, что у меня творится внизу, когда я нахожусь в h_conteiner c элементами A1, A2 и A3. Находясь в этой группе, я должен сократить на две ширины элементов... Хотя на самом деле только на 1 ширину. Другими словами, как отслеживать ширину других групп? |
|
|||||
|
Никак. Я бы, в вашем случае, вообще избавился от контейнеров.
Отделите данные от визуализации. Все визуальные элементы (рендереры данных) можно расположить в одном контейнере и при изменении данных передвигать, добавлять или перерисовывать рендереры. Ну и написать свой layout для их расположения. Для вдохновения можете посмотреть Flare (кликните на Layouts). Исходники.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 40
|
Спасибо, буду разбираться.
|
|
|||||
|
__________________
משיח לא בא משיח גם לא מטלפן |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:05. |
|
|
« Предыдущая тема | Следующая тема » |
|
|