AS3 TextField не применяет тег <b> - PullRequest
2 голосов
/ 27 апреля 2011

Используя AS3, я динамически создаю, измеряю, позиционирую и форматирую текстовое поле. Я динамически устанавливаю содержимое текстового поля из содержимого XML-файла. Я пытаюсь использовать жирный тег и заметил, что он не работает. После небольшого поиска лучшее, что я мог придумать, это " Flash CS4 tag с htmlText ". Итог: мне нужно вставить смелый шрифт.

В качестве примера, скажем, я хочу использовать Tahoma. В моем .fla файле (используя Flash CS4) я встраиваю Tahoma и экспортирую его для использования в actionscript. Это позволяет мне использовать Tahoma в качестве шрифта в моем текстовом поле. Если я попытаюсь использовать тег b (textfield.htmlText="not bold, <b>bold</b>";), жирный текст не ободрится. Основываясь на вышеупомянутом вопросе, я также включил версию Tahoma для Bold.

Как связать жирную версию Tahoma с обычной версией Tahoma, чтобы при использовании жирного тега я получал жирный текст в своем текстовом поле?

Ответы [ 3 ]

4 голосов
/ 27 апреля 2011

Для настройки определенных разделов текста, выделенного жирным шрифтом, вы должны сделать это раздражающим способом: TextFormats.

Вроде так;

var t:TextField = new TextField();
t.text = "this is bold";

var f:TextFormat = new TextFormat();
f.bold = true;

t.setTextFormat(f, 0, 4); // start at character 0, end at character 4

addChild(t);

Будет выведено следующее: это выделено жирным шрифтом.

EDIT Это должно облегчить:

/**
 * Render a given portion of a String as bold
 * @param field The target TextField
 * @param needle The section of text to render bold
 */
function bolden(field:TextField, needle:String):void
{
    var tf:TextFormat = new TextFormat();
    tf.bold = true;

    var pos:uint = field.text.indexOf(needle);
    field.setTextFormat(tf, pos, pos + needle.length);
}


// example below
var t:TextField = new TextField();
t.text = "i like iced tea";

bolden(t, "iced");

addChild(t);

EDIT Как дела.

/**
 * Apply <b> tags
 * @param field The target TextField
 */
function bolden(field:TextField):void
{
    var tf:TextFormat = new TextFormat();
    tf.bold = true;

    var pos:int = 0;
    var cls:int = 0;

    while(true)
    {
        pos = field.text.indexOf("<b>", pos);
        cls = field.text.indexOf("</b>", pos);

        if(pos == -1) break;

        field.setTextFormat(tf, pos+3, cls);
        pos = cls;
    }
}


// example below
var t:TextField = new TextField();

t.width = stage.stageWidth;
t.htmlText = "i like <b>iced</b> tea and <b>showbags</b>";

bolden(t);

addChild(t);

Урожайность: мне нравится чай со льдом и сумки для показа .

0 голосов
/ 02 марта 2013

Во Flash поместите Dynamic TextField с именем экземпляра «myTextField» и разместите следующий код на временной шкале.(Только для целей тестирования, в противном случае код временной шкалы не рекомендуется),

 var str:String = <![CDATA[ <font face='Arial' size='18' align='left'> This is my <b>BOLD</b>  text </font>]]>;
 myTextField.htmlText = str;
0 голосов
/ 27 апреля 2011

Основано на ответе @ Marty Wallace :

Я установил свой текстовый формат ранее в коде. Загружает шрифт, размер и т. Д.

Что я делаю, так это применяю шрифт к моему текстовому полю, а затем устанавливаю атрибут textformat bold как true, если строка содержит тег bold. Размещение кода над setTextFormat делает все текстовое поле жирным. По какой-то причине установка его под текстовым полем делает помеченный текст жирным.

textfield.setTextFormat(textformat);
if(xmlText.search('<b>')){
    textformat.bold = true;
}

[править]

Не нужно, если:

textfield.setTextFormat(textformat);
textformat.bold = true;

[править]

Вам также необходим встроенный шрифт, чтобы это работало. Я удалил его из библиотеки и не смог заставить жирный шрифт работать снова>. <В моем примере с tahoma имя шрифта должно быть «Tahoma bold». </p>

Так что теперь мне нужно встроить выделенные и выделенные курсивом версии всех моих шрифтов, если я хочу использовать и в моем htmlText

...