こんにちはtaroです.

明けましておめでとうございます.

今回はXMLを利用して、TextFieldに複雑な書式を設定する方法について考えていきます.

TextFieldに複雑な書式を設定するには2通りの方法があります.

  • TextFormatとTextField.setTextFormat()の組み合わせ.
  • htmlTextを用いる.

今回はhtmlTextを使用して, 色々な書式を設定していきます.

しかし, htmlTextというと少し面倒です.

tf.htmlText = '<font face="_ゴシック" color="#C83E43"><u><a href="event:'
            + event_name + '">' + str + '</a></u></font>';

このように, + や ' が大量にある式を書くこととなるからです.

 

XMLを利用する

そこで, htmlTextに設定する文字列を生成するのにXMLを使用するということを考えてみます.

ActionScript3.0で利用出来るE4X(ECMAScript for XML)には { } という記法があります.

 

var タグ:String = 'p';
var 属性名:String = 'face';
var 属性値:String = '_ゴシック';
var 内容:String = 'テキスト';

var myXML:XML = <{タグ} {属性名}={属性値}>{内容}</{タグ}>;
// xmlの内容を表示
trace(myXML.toXMLString()); // <p face="_ゴシック">テキスト</p>

 

このように, { } はタグ名, 属性名, 属性値, ノードの中身を, 変数の値として設定することが出来ます.

htmlTextの設定と相性が良さそうです. 先ほどの例を使って, 早速やってみます.

 

var html_text:XML = <font face="_ゴシック" color="#C83E43">
                      <u><a href={'event:' + event_link}>{str}</a></u>
                    </font>;
tf.htmlText = html_text.toXMLString();

さてどうでしょう.

 

複数行になってしまいました. 何が問題なのでしょうか, 設定されている文字列を調べてみます.

<font face="_ゴシック" color="#C83E43">
  <u>
    <a href="event:click">テキスト・リンク</a>
  </u>
</font>

 

どうやら、XMLから文字列をつくるのに整形されてしまっているようです. これを止めるにはどうすればいいでしょうか. リファレンスを見ます.

 

XML.prettyPrinting = false;

 

prettyPrintingというのをtoggleしてfalseにしてやれば整形されない文字列として出力してくれそうです. 1行足してみます.

 

var html_text:XML = <font face="_ゴシック" color="#C83E43">
                      <u><a href={'event:' + event_link}>{str}</a></u>
                    </font>;
// 追加
XML.prettyPrinting = false;
tf.htmlText = html_text.toXMLString();

みてみます.

 

良さそうです. 生成されている文字列も期待通りのものとなっています.

<font face="_ゴシック" color="#C83E43"><u><a href="event:click">テキスト・リンク</a></u></font>

 

まとめ

今回はhtmlTextを用いた書式の設定について少し考えてみました.

  • XMLの { } を用いると, + や ' 等の煩わしさから開放される.
  • XML.prettyPrinting = false; と設定して整形されないように気をつける.

HTML5飯