2009-05-26 5 views
0

Je suis l'alimentation de l'étiquette à mon LinkButton directement à partir d'une chaîne que je reçois d'une API Google qui met html pour formater l'étiquette.Comment puis-je étendre un LinkButton pour autoriser le texte HTML dans Flex?

Je veux étendre le linkbutton pour permettre ceci. J'ai écrit moi-même une classe pour permettre le texte html pour l'étiquette et cet aspect fonctionne mais maintenant l'arrière-plan qui apparaît quand vous planez est trop grand. J'ai essayé de remplacer measure() pour résoudre ce problème mais je n'avais aucune idée de comment. Voici la classe que j'ai écrite:

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; 
      } 
     } 



    } 
} 

Répondre

0

La fonction measure() est la clé.

En supposant que vous utilisez une version de compatibilité flex> = 3.0, la ligne clé est dans Button.measure():

var lineMetrics:TextLineMetrics = measureText(label); 

Vous devez changer pour quelque chose comme:

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

Vous devrez probablement copier la fonction de mesure du bouton dans votre classe et effectuer cette modification.

Si vous faites cela, vous aurez très likley besoin d'importer l'espace de noms interne, comme ceci:

import mx.core.mx_internal; 

use namespace mx_internal; 
+0

Merci! la clé principale qui me manquait était d'utiliser l'espace de noms mx_internal. Aussi pas sûr de ce que cette ligne signifiait mais cela n'a pas fonctionné jusqu'à ce que j'ajoute "OU vrai" à l'expression: if (FlexVersion.compatibilityVersion

Questions connexes