2009-05-26 61 views
0

我將標籤直接從我從Google API接收的字符串中添加html來格式化標籤,從而將標籤添加到我的LinkBut​​ton。如何擴展LinkBut​​ton以在Flex中允許HTML文本?

我想擴展linkbutton來允許這個。我自己寫了一個類來允許標籤的html文本,並且它的這個方面有效,但是現在當你懸停的時候出現的背景太大了。我試圖覆蓋measure()來解決這個問題,但我不知道如何。這裏是我寫的類:

package com.kranichs.components 
{ 
    import mx.controls.LinkButton; 

    public class HTMLLinkButton extends LinkButton 
    { 
     protected var _isHTML:Boolean; 

     public function HTMLLinkButton() 
     { 
      super(); 
     } 

     [Bindable] 
     public function set isHTML(value:Boolean):void 
     { 
      _isHTML = value; 
     } 
     public function get isHTML():Boolean 
     { 
      return _isHTML; 
     } 

     override protected function updateDisplayList(unscaledWidth:Number, 
                unscaledHeight:Number):void 
     { 
      super.updateDisplayList(unscaledWidth, unscaledHeight); 
      if(_isHTML) 
      { 
       textField.htmlText = label; 
      } 
     } 



    } 
} 

回答

0

measure()函數是關鍵。

假設你使用的是柔性兼容版本> = 3.0,則重點線是Button.measure():

var lineMetrics:TextLineMetrics = measureText(label); 

您需要將此更改爲類似:

var lineMetrics:TextLineMetrics = _isHTML ? measureHTMLText(label) : measureText(label); 

您可能需要將測量功能從按鈕複製​​到您的班級並進行更改。

如果你這樣做,你將最likley需要導入內部命名空間,就像這樣:

import mx.core.mx_internal; 

use namespace mx_internal; 
+0

謝謝!我錯過的主要關鍵是使用mx_internal命名空間。還不確定這行代表什麼意思,但是直到我在表達式中添加「或者」,纔會起作用: if(FlexVersion.compatibilityVersion 2009-05-26 19:36:28

相關問題