2010-11-09 40 views
3

我正在構建一個小的Flex UI組件,它在文本標籤旁邊顯示一個彩色方塊。我希望能夠爲方塊指定尺寸,並在內部調整標籤的屬性,使線高與方塊匹配,文本相對於方塊垂直居中。在Flex中,如何調整字體大小以將標籤與圖標對齊?

目前,我正在使用mx.controls.Label作爲文本。將fontSize樣式設置爲正方形的尺寸不起作用,則標籤變得太大。跟蹤幾個值的調試器後,我發現

  • 內部文本字段的行高度(通過getTextFieldMetircs()得到的TextFieldMetrics對象的ascentdescent特性的總和)似乎最終約120%我指定的字體大小。
  • 有一個默認的2個像素的「龍頭」,我不能在Label水平直接改變,這增加了內部文本字段的總高度(getTextFieldMetrics().height
  • Label部件的高度,然後是一個額外的比那大5像素,我不知道那些從哪裏來。

我目前的解決方案是將字體大小設置爲Math.round((iconSize - 2)/1.2)但在這工作了OK十歲上下,似乎不盡人意。有沒有更可靠,更直接的方法呢?

+0

你不能只是縮放你的標籤,以適應廣場,而不是試圖找出字體大小? – 2010-11-09 14:59:26

+0

@Gregor - 我還沒有嘗試過。當你說縮放時,你的意思是'setActualSize'還是設置我認爲我從'UIComponent'或'DisplayObject' API中記住的比例因子? (另外,您的評論可能應該發佈爲答案,否?) – 2010-11-09 15:23:46

+0

我的意思是設置scaleX和scaleY(您可能需要嵌入字體才能正常工作)http://help.adobe.com/en_US/FlashPlatform/ /reference/actionscript/3/mx/core/UIComponent.html#scaleX,我會告訴你什麼。如果有效,我會將其添加爲答案;) – 2010-11-09 17:12:55

回答

0

同時,我已經嘗試了一點與使用UITextField代替Label,並導致我一個有趣的現象:這兩個組件似乎做一些內部的比例,並根據字體大小調整,使呈現的文本會總是有一些填充。使用任一組件時,從getTextLineMetrics()返回的數字對於相同的字體大小而不同。

UITextField呈現文本,使得組件的總像素高度符合指定爲fontSize的數字,這反過來使實際文本略小(約2-4像素)。而且,當您將leading設置爲零時,它似乎忽略。

Label將所得線高度與指定爲fontSize的線高度相匹配,從而使組件大於(約5個像素)。

雖然這對我來說確實很讓人困惑,但我對使用Label組件並將其定位使頂部和底部的多餘空白由父組件修剪並且無關緊要感到滿意。文本的大小正確。我垂直居中,這很簡單,但它也可以使用getTextLineMetrics()中的數字進行更復雜的定位。