【TLF】ハマったポイントと回避方法


TLF(Text Layout Framework)については、これまでもブログ記事にしましたが、
触っていてハマったポイントが幾つかあるので、その解決方法と一緒に紹介します。
 


 
 
1:TLFのIME入力ができない

【現象】
Flash Builder 4.0 に同梱されている AIR のバージョンが 1.5.3 / Flash Player のバージョンが 10.0では、
sparkテキスト(TLFを使ったテキスト)のIME入力(インライン入力)が出来ません。

【回避方法】
縦書で入力を行うようなコンテンツを作る場合は、Flex 4.1 SDKで開発し、
AIR 2.0 / Flash Player 10.1 を対象にする必要があります。

【参考】
「Adobe Tech Note : IME入力が機能しない」
http://kb2.adobe.com/jp/cps/836/cpsid_83672.html
 
 
2:Tabの挙動がおかしい

【現象】
Tab入力したのに、改行される

【回避方法】
FlashPlayer10では、Tabが改行扱いになるようで、
FlashPlayer10.1では、Tab(デフォで48pix)扱いになります。
FP10でTabを使いたい場合は、下記のようにTabの入力回数毎に、
TabStopFormatを設定してあげる必要があります。

var tabStop1:TabStopFormat = new TabStopFormat();
tabStop1.alignment = TabAlignment.CENTER;
tabStop1.position = 100;

ちなみに、下記のコードでTLFでのTab入力を可能になります。

var config:Configuration = new Configuration();
config.manageTabKey = true;
var textFlow:TextFlow = new TextFlow(config);

【参考】
Adobeフォーラム 「Tab in TLF」
http://forums.adobe.com/message/2552548#2552548
Adobeフォーラム 「TabElement Not Supported with TextLayout Framework」
http://forums.adobe.com/message/2284240#2284240
 
 
3:FlashCS5でTLFを使うと、FlashVarsの値がとれない

【現象】
Flashvarsは、HTMLから埋め込みswfファイルに値を渡すプロパティで、
通常 loaderInfo.parameters で値が取得できます。
しかし、TLFを使ったコンテンツで、かつパブリッシュ設定がデフォルトのままだと、
値が取れなくなってしまいます。

【回避方法】
原因はランタイム共有ライブラリ(RSL)のようです。
まず、TLFテキストを使用するということは「textLayout.swc」ライブラリを利用することになり、
デフォルト設定のままパブリッシュすると、「textLayout_x.x.x.xxx.swz」というRSLファイルとして出力されます。
これによって、本体SWFの容量はスリムになりますが、実行時に”TLF RSLの読込み”が必要となります。
このTLFのRSLのローディングに問題があり、下記コードで回避できます。

\\通常はこの1行で、Flashvarsの値が取れる
var params:Object = loaderInfo.parameters;

\\追加チェックする
if (parent != null && parent.parent != null)
{
params = parent.parent.loaderInfo.parameters;
}

*但し、コンストラクタや2フレーム目に書くのは無く、必ず1フレーム目に書く

その他の回避方法として、
1:クラシックテキストを使う(TLFを使わない)
2::パブリッシュ設定でTLFをコードにマージする(RSLを使わない)

【参考】
Adobeフォーラム 「TFL flashvars bug」
http://forums.adobe.com/message/2859307#2859307
Flash Professional CS5 ユーザーガイド 「TLF テキストを含む SWF ファイルのパブリッシュ」
http://help.adobe.com/ja_JP/flash/cs/using/WSb03e830bd6f770ee-4b0db644124bbdb363d-8000.html
Flex3 Help 「フレームワーク RSL の使用」
http://livedocs.adobe.com/flex/3_jp/html/help.html?content=rsl_09.html
 
 
4:TLF API で作ったテキストボックスで、日本語入力ができない

【現象】
TLF APIを使って、1から編集可能なテキストボックスを作成した場合、
IMEの入力モードが変更できず、日本語入力ができない。
詳しくはコチラ
(環境によって再現しないかも知れません)

【回避方法】
IMEを有効にするのに IME.enabled = true となる必要があるのですが、
作ったテキストボックスのフォーカス・インのタイミングで確認すると、
false になってますので、下記のように強制的に true にします。

function onFocus(e:FocusEvent):void
{
if(Capabilities.hasIME){
IME.enabled = true;
}
}

【参考】
FxUG 「TextInput の IME 制御について」
http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=3867