Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Как подсчитать высоту <mx:Text/> (http://www.flasher.ru/forum/showthread.php?t=139061)

wer32 22.04.2010 14:34

Как подсчитать высоту <mx:Text/>
 
Дамы и Господа может кто нибудь сталкивался с такой проблемой.

создал List

Код AS3:

<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

Код AS3:

 
// 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"/>

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


Часовой пояс GMT +4, время: 22:35.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.