Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.04.2010, 14:34
wer32 вне форума Посмотреть профиль Отправить личное сообщение для wer32 Найти все сообщения от wer32
  № 1  
Ответить с цитированием
wer32
 
Аватар для wer32

Регистрация: Dec 2008
Сообщений: 88
По умолчанию Как подсчитать высоту <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, время: 07:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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