2009-04-16 55 views
3

我正在寫一個Adobe Air客戶端來使用類似於Twitter的服務。重新測量列表中的自定義項目渲染器

在時間軸上(List組件)我有一個自定義項目渲染器,它基本上是一個具有固定寬度圖像和多行文本控件的畫布。

如果文本長度足以更改Canvas高度,則只有在手動更改窗口寬度時纔會調整其大小,從而強制重繪所有渲染器。如果我簡單地滾動瀏覽列表,所有「新」渲染器都將具有可能的最小高度(這是圖像高度)。

有關如何在設置數據時強制重新測量渲染器的任何想法?

在此先感謝! :)

回答

0

嘗試列表

+0

我已經試過了。沒有成功。 – leolobato 2009-04-19 20:11:03

+0

我記得有一些類似的東西在掙扎,但我找不到代碼。嘗試使用callLater函數在另一個幀上調用invalidateDisplayList()。你也可以嘗試validateNow()。對不起,我不能給你一個具體的解決方案。 – rogueg 2009-04-20 15:19:16

0

你嘗試爲列表設置variableRowHeight=true

0

如果處理updateComplete事件,則可以重新計算其大小。它可能是因爲updateComplete發生在每次繪製itemrenderer時發生,但它可以工作。

0

首先,您必須將variableRowHeight設置爲true;
在您的itemRenderer中,您應該關閉verticalScrollPolicy(我假設您已經這樣做),並且也對文本控件執行相同操作。還要將文字的高度設置爲100%。
我沒有在Flex4中嘗試它,但在之前的版本中,爲了使其基於其文本內容調整大小,我必須將VBox作爲根用於itemRenderer,所以您應該考慮使用VBox/VGroup實例而不是Canvas

0

我遇到了一個非常類似的問題,即在數據網格中使用需要根據文本自行調整大小的標籤調整項目渲染器的大小。問題是它需要兩行才能讓多行文本組件正確更新。這適用於大多數控件,因爲它們不斷更新和定位。它在列表或網格中失敗,因爲發生更改時的第一次更新會強制列表測量項目渲染器,然後根據返回的結果設置其行的高度。項目渲染器然後第二次更新自身(這次正確測量自己),但列表不在尋找那些更新更改。我採取強制驗證度量傳遞中的標籤(文本控件)以正確地獲取文本組件的大小,以便渲染器在任何更改後報告第一次更新傳遞的正確測量高度。我的任務(和我後來發現的anser和一些討論)在這裏:ItemRenderer hieght (and height changes) not reflected in AdvancedDataGrid row