|
|
|||||
Регистрация: Dec 2009
Сообщений: 122
|
resize содержимого компонента List
Здравствуйте уважаемые программисты.
У меня вот такой лист <s:List width="100%" height="50%" dataProvider="{arrMonths}"> <s:layout> <s:HorizontalLayout gap="0"/> </s:layout> <s:itemRenderer> <fx:Component> <s:ItemRenderer> <!-- Всего будет 12 элементов --> <s:Panel width="100%" height="100%"> <s:Label text="{data}" left="10" top="8" fontSize="15"/> </s:Panel> </s:ItemRenderer> </fx:Component> </s:itemRenderer> </s:List> Я уже пробовал переопределить measure() в объекте класса ItemRenderer. Если написать то ширина панелек пересчитывается, но какого-то черта проект не запускается пока не развернешь и обратно не свернешь окно браузера. Не понимаю что происходит, помогите плиз. |
|
|||||
Регистрация: Dec 2009
Сообщений: 122
|
Сделал так...
<s:List width="100%" height="50%" dataProvider="{arrMonths}"> <s:layout> <s:HorizontalLayout gap="0"/> </s:layout> <s:itemRenderer> <fx:Component> <s:ItemRenderer> <s:HGroup width="100%" height="100%"> <s:Panel width="100%" height="100%" minHeight="30" minWidth="30"> <s:Label text="{data}" left="10" top="8" fontSize="15"/> </s:Panel> </s:HGroup> </s:ItemRenderer> </fx:Component> </s:itemRenderer> </s:List> Добавлено через 2 минуты Правда не очень догоняю как это вообще должно было помощь. Если сделать так... то ресайзицца по высоте, а по ширине никак хоть ты убейся |
|
|||||
Регистрация: Dec 2009
Сообщений: 122
|
Вы наверное не совсем правильно поняли вопрос.
Мне нужно чтобы мой ИтемРендереры располагались в Листе по всей его ширине |
|
|||||
[+3 31.07.12]
[+1 27.08.13] |
Пршу прощения, был не внимателен и не понял вопрос
__________________
Хоть ты эту красоту не назовёшь граблями, всё равно никогда не наступай на них. |
|
|||||
Регистрация: Nov 2010
Сообщений: 9
|
AntonSurkont, доброго времени суток!
Слегка поэксперементировал на твою тему... На мой взгляд, самый простой вариант сделать так: <fx:Script> <![CDATA[ //... [Bindable] protected var item_width:int; protected function application1_creationCompleteHandler(event:FlexEvent):void { //... item_width = int(list.width/12); } ]]> </fx:Script> <s:List id="list" width="100%" height="50%" dataProvider="{arrMonths}"> <s:layout> <s:HorizontalLayout columnWidth="{item_width}" gap="0" variableColumnWidth="false"/> </s:layout> <s:itemRenderer> <fx:Component> <s:ItemRenderer> <s:Panel width="100%" height="100%"> <s:Label text="{data}" left="10" top="8" fontSize="15"/> </s:Panel> </s:ItemRenderer> </fx:Component> </s:itemRenderer> </s:List> мне кажется, этот вариант громоздкий и если еще покопаться можно найти более лаконичный способ средствами флекса, но тем не менее, работает) |
|
|||||
Регистрация: Dec 2009
Сообщений: 122
|
Спасибо
|
|
|||||
Размещением элементов должен заниматься layout. Пришется layout:
package alatar.layouts { import mx.core.ILayoutElement; import spark.components.supportClasses.GroupBase; import spark.layouts.supportClasses.LayoutBase; public class SimplePagedLayout extends LayoutBase { override public function measure():void { var totalWidth:Number = 0; var totalHeight:Number = 0; var layoutTarget:GroupBase = target; var count:int = layoutTarget.numElements; for (var i:int = 0; i < count; i++) { var element:ILayoutElement = useVirtualLayout ? layoutTarget.getVirtualElementAt(i) : layoutTarget.getElementAt(i); if (!element) element = typicalLayoutElement; var elementWidth:Number = layoutTarget.width; var elementHeight:Number = layoutTarget.height; totalWidth += elementWidth; totalHeight = elementHeight; } layoutTarget.measuredWidth = totalWidth; layoutTarget.measuredHeight = totalHeight; layoutTarget.measuredMinWidth = totalWidth; layoutTarget.measuredMinHeight = totalHeight; } override public function updateDisplayList(containerWidth:Number, containerHeight:Number):void { var x:Number = 0; var y:Number = 0; var maxWidth:Number = 0; var maxHeight:Number = 0; var rowHeight:Number = 0; var layoutTarget:GroupBase = target; var count:int = layoutTarget.numElements; for (var i:int = 0; i < count; i++) { var element:ILayoutElement = useVirtualLayout ? layoutTarget.getVirtualElementAt(i) : layoutTarget.getElementAt(i); element.setLayoutBoundsSize(layoutTarget.width, layoutTarget.height); var elementWidth:Number = layoutTarget.width; var elementHeight:Number = layoutTarget.height; element.setLayoutBoundsPosition(x, y); maxWidth = Math.max(maxWidth, x + elementWidth); maxHeight = elementHeight; x += elementWidth; } layoutTarget.setContentSize(maxWidth, maxHeight); } } } <s:List width="100%" height="50%" dataProvider="{arrMonths}"> <s:layout> <layouts:SimplePagedLayout/> </s:layout> <s:itemRenderer> <fx:Component> <s:ItemRenderer> <!-- Всего будет 12 элементов --> <s:Panel width="100%" height="100%"> <s:Label text="{data}" left="10" top="8" fontSize="15"/> </s:Panel> </s:ItemRenderer> </fx:Component> </s:itemRenderer> </s:List> |
|
|||||
Регистрация: Dec 2009
Сообщений: 122
|
Спасибо
Добавлено через 56 минут alatar подскажите плиз, а как сделать чтобы 12 компонентов ровно располагались по ширине листа без горизонтальной прокрутки. <s:Panel width="9%" height="100%"> делал <s:ItemRenderer width="9%" height="100%"> делал ну вообщем перебрал все возможные width если попытаться изменить layoutTarget.width=Math.round(layoutTarget.width/12); в updateDisplayList проект вешается я трейсил layoutTarget.width он у меня 1280 почему такой большой? Добавлено через 1 час 20 минут Вот так получилось package longCalendar.layouts { import mx.core.ILayoutElement; import spark.components.supportClasses.GroupBase; import spark.layouts.supportClasses.LayoutBase; public class SimplePagedLayout extends LayoutBase { public function SimplePagedLayout() { super(); } override public function measure():void { var totalWidth:Number = 0; var totalHeight:Number = 0; var layoutTarget:GroupBase = target; var count:int = layoutTarget.numElements; for (var i:int = 0; i < count; i++) { var element:ILayoutElement = useVirtualLayout ? layoutTarget.getVirtualElementAt(i) : layoutTarget.getElementAt(i); if (!element) element = typicalLayoutElement; var elementWidth:Number = layoutTarget.width; var elementHeight:Number = layoutTarget.height; totalWidth = elementWidth; totalHeight = elementHeight; } layoutTarget.measuredWidth = totalWidth; layoutTarget.measuredHeight = totalHeight; layoutTarget.measuredMinWidth = totalWidth; layoutTarget.measuredMinHeight = totalHeight; } override public function updateDisplayList(containerWidth:Number, containerHeight:Number):void { var x:Number = 0; var y:Number = 0; var maxWidth:Number = 0; var maxHeight:Number = 0; var rowHeight:Number = 0; var layoutTarget:GroupBase = target; var count:int = layoutTarget.numElements; for (var i:int = 0; i < count; i++) { var element:ILayoutElement = useVirtualLayout ? layoutTarget.getVirtualElementAt(i) : layoutTarget.getElementAt(i); element.setLayoutBoundsSize(Math.round(layoutTarget.width/12), layoutTarget.height); var elementWidth:Number = Math.round(layoutTarget.width/12); var elementHeight:Number = layoutTarget.height; element.setLayoutBoundsPosition(x, y); maxWidth = Math.max(maxWidth, x + elementWidth); maxHeight = elementHeight; x += elementWidth; } //layoutTarget.setContentSize(maxWidth, maxHeight); } } } Последний раз редактировалось AntonSurkont; 12.04.2011 в 13:04. |
|
|||||
Пардон, думал вам надо что бы один элемент был на всю ширину списка.
Цитата:
|
|
|||||
Регистрация: Dec 2009
Сообщений: 122
|
Еще раз спасибо
|
Часовой пояс GMT +4, время: 18:45. |
|
« Предыдущая тема | Следующая тема » |
Теги |
list |
|
|