Как расширить LinkButton, чтобы разрешить HTML-текст во Flex?
Я передаю метку на свой LinkButton непосредственно из строки, которую я получаю от Google API, который помещает 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;
}
}
}
}
1 ответ
Функция measure() - это ключ.
Предполагая, что вы используете версию совместимости flex>= 3.0, ключевая строка находится в Button.measure():
var lineMetrics:TextLineMetrics = measureText(label);
Вам нужно изменить это на что-то вроде:
var lineMetrics:TextLineMetrics = _isHTML ? measureHTMLText(label) : measureText(label);
Вам, вероятно, потребуется скопировать функцию измерения из кнопки в ваш класс и внести это изменение.
Если вы сделаете это, вам, скорее всего, потребуется импортировать внутреннее пространство имен, например так:
import mx.core.mx_internal;
use namespace mx_internal;