PDA

Просмотр полной версии : Как подсчитать высоту <mx:Text/>


wer32
22.04.2010, 14:34
Дамы и Господа может кто нибудь сталкивался с такой проблемой.

создал List


<mx:List rollOverColor="White" selectionColor="White"
creationComplete="OnInit()" dataProvider="{lData}"
itemRenderer="{new ClassFactory(ReportsListBoxItem)}"
height="100%" width="100%"
variableRowHeight="true"
xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
<![CDATA[
[Bindable]
private var lData:ArrayCollection = new ArrayCollection();

public function SetData(lXMLData:XMLList):void
{
lData = new ArrayCollection();

for each(var xmlItem:XML in lXMLData)
{
var objItem:Object = new Object();
objItem.XML = xmlItem;
objItem.label = String(xmlItem.@label);
lData.addItem(objItem);
}
this.selectedIndex = 0;
}
]]>
</mx:Script>

</mx:List>


как видно ниже у него ItemRenderer - ReportsListBoxItem



// ReportsListBoxItem.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="OnInit()"
width="100%">

<mx:Script>
<![CDATA[

[Bindable]
public var m_strLabel:String = "";

public override function set data(value:Object):void
{
super.data = value;

if (value != null)
{
m_strLabel = value.label;
}
}

override protected function measure():void
{
super.measure();

if (m_strLabel.length > 0)
{
measuredHeight = this.getExplicitOrMeasuredHeight();
}
}

]]>
</mx:Script>

<mx:Text id="lblItem"
text="{m_strLabel}"
color="Red"
styleName="ItemRender"
selectable="false"
width="100%"/>
</mx:HBox>



Проблемма в том, что высота у каждого итем рендера прыгает сильно, и когда перезаполняю одними и теми же данными, в первый раз оно не верно выставляет высоту рендерера, при втором заполнении оно выставляет конкретную высоту. Из-за этого в List врубается или отключается скрол. как будто его заполнили тучей элементов (хотя в нем всего один).

Если хардкодить measuredHeight к примеру measuredHeight = 50;
то высота у каждого элемента фиксированная и лист работает коректно, но сами рендереры неправильной высоты.

Как вариант решения вижу подсчет высоты <mx:Text id="lblItem"/>

только как это сделать не подозреваю.