Flex, ссылка в textFlow RichEditableText не активируется, если задана ширина и текст выровнен по центру - PullRequest
0 голосов
/ 10 июня 2011

, поэтому у меня есть следующий код.

    <fx:Script>
        <![CDATA[
            import flashx.textLayout.conversion.TextConverter;
            private var stringWithLink : String = "click for some event<a href='event:foobar'>foobar 012345647890123456789</a>";
        ]]>
    </fx:Script>

    <s:RichEditableText id="text1" editable="false"  selectable="false" left="0" right="0" textAlign="center"
                        textFlow="{TextConverter.importToFlow(stringWithLink, TextConverter.TEXT_FIELD_HTML_FORMAT)}" />

</s:WindowedApplication>

есть один RichEditableText (text1) с html текстом с href, который генерирует какое-то событие (foobar). Проблема в том, что часть ссылки не работает. для простоты я не включил код для перехвата события из textFlow, но вы можете сказать, что ссылка не работает, потому что курсор мыши не превратится в курсор руки для первой части ссылки. От начала ссылки до первых 9 указатель мыши останется указателем, но если вы наведете указатель мыши на первые 9, курсор изменится на курсор руки. Если вы удалите числовую часть строки, вся ссылка перестанет отвечать.

Это похоже на проблему с шириной и выравниванием текста. Если вы не определите ширину для text1, проблема исчезнет. но если вы определите фиксированную ширину или процентную ширину, проблема вернется. Я также попробовал другое выравнивание текста. Если вы попробуете какое-либо выравнивание, которое выровняет текст по левому краю (начало, выравнивание, слева), оно будет работать правильно. Но если вы используете выравнивание, которое выровняет текст по левому краю (по центру, справа, по краю), проблема вернется.

У кого-нибудь есть идеи, почему это может происходить? какие-либо решения?

1 Ответ

1 голос
/ 17 апреля 2012

Я столкнулся с той же проблемой. Не уверен, почему это происходит. Я нашел решение, хотя. У него есть один недостаток, заключающийся в том, что можно сделать кликабельным все текстовое поле, а не только URL. В моем приложении я динамически создаю объекты flex UI на лету из XML. Так что у меня уже есть строка HTML и выравнивание текста.

//htmlText - html string pulled from the xml
//align - text alignment from xml
//txt - RichEditableText object

if ((htmlText.search(/<a *href/g) >= 0) && (align.toLowerCase() != 'left')) {
    txt.textFlow.addEventListener(FlowElementMouseEvent.MOUSE_MOVE, useMouseHand);
    txt.addEventListener(MouseEvent.CLICK, urlClickHandler);
    txt.addEventListener(MouseEvent.MOUSE_OVER, useMouseHand);
}

Функция useMouseHand имеет один оператор: Mouse.cursor = MouseCursor.BUTTON;

Функция urlClickHandler анализирует htmlText для значений href и target и вызывает navigateToURL (flash.net.navigateToURL).

Что касается слушателей событий, я обнаружил, что мне нужно, чтобы обработчики текста и RichEditableText для мыши над / перемещали, чтобы курсор на руке отображался.

Надеюсь, это поможет.

...