Как расширить 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;
Другие вопросы по тегам