Como posso estender um LinkButton para permitir texto HTML no Flex?
-
06-09-2019 - |
Pergunta
Estou alimentando a etiqueta ao meu LinkButton diretamente de uma corda que recebo de uma API do Google que coloca HTML para formatar o rótulo.
Eu quero estender linkbutton para permitir isso. Eu escrevi uma classe-me a permitir que o texto html para o rótulo e esse aspecto ele funciona, mas agora o pano de fundo que aparece quando você passa é muito grande. Tentei medida override () para corrigir isso, mas eu não tinha idéia de como. Aqui é a classe que eu escrevi:
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;
}
}
}
}
Solução
a função measure () é a chave.
Supondo que você estiver usando uma versão compatibilidade Flex> = 3.0, a linha chave está em Button.measure ():
var lineMetrics:TextLineMetrics = measureText(label);
Você precisa mudar isso para algo como:
var lineMetrics:TextLineMetrics = _isHTML ? measureHTMLText(label) : measureText(label);
Você provavelmente terá que copiar a função medida de botão em sua classe e fazer essa alteração.
Se você fizer isso, você terá mais likley para importar o namespace interno, como este:
import mx.core.mx_internal;
use namespace mx_internal;