Flash でも出来るので、もちろんAIRアプリでも可能のはずですが、
どうにもこうにも表示されません。
まず、そもそもAIRアプリで表示出来るのか調べてみました。
ネットで調べる限りには、”FlashDevelop” を使っても埋め込み可能。
1 2 |
[Embed(source = 'xxxxxx.ttf'", fontFamily = 'zzzzz', mimeType='application/x-font', embedAsCFF = 'false')] private var myFont:Class; |
と宣言し、後は “TextLayoutFormat” で “fontFamily” を宣言で記述した zzzzz に設定。
更に、”TextField” でその “TextLayoutFormat” を設定してあげれば表示されるようです。
が表示されません。
ビルドして出来たSWFファイルを見てみると、Font自体は埋め込まれてるみたいです。
こうなると、”TextField” と “TextLayoutFormat” を使った表示の仕方に問題が
あるように思われます。
で、調べてみると
http://forums.adobe.com/thread/871862
という記事が見つかりました。
こちらでも、どうやら表示できなくて困ってるらしく解決方法は下のほうの書き込みにありました。
“FontDescription”
“ElementFormat”
“TextBlock”
“TextElement”
“TextLine”
を使った方法で、やっと埋め込みフォントが表示できました。このまま使うのは面倒なので、
これらを内包したオリジナルな “TextField”を作ってあげました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
public class EmbedTextField extends Sprite { [Embed("xxxxxx.ttf",fontFamily='zzzzz',mimeType='application/x-font',embedAsCFF='true')] private var font01:Class; private var m_elementFormat:ElementFormat; private var m_textElement:TextElement; private var m_textBlock:TextBlock; private var m_textLine:TextLine; private var m_strText:String; private var m_iWidth:int; private var m_iSize:int; private var m_uiColor:uint; public function EmbedTextField(text:String = "", width:int = 300, size:int = 12, color:uint = 0x000000) { this.m_strText = text; this.m_iWidth = width; this.m_iSize = size; this.m_uiColor = color; var _fd:FontDescription = new FontDescription(); _fd.fontLookup = FontLookup.EMBEDDED_CFF; _fd.fontName = "zzzzz"; this.m_elementFormat = new ElementFormat(_fd); this.m_elementFormat.fontSize = this.m_iSize; this.m_elementFormat.color = this.m_uiColor; this.m_elementFormat.alignmentBaseline = TextBaseline.IDEOGRAPHIC_CENTER this.m_textElement = new TextElement(this.m_strText, this.m_elementFormat); this.m_textBlock = new TextBlock(); this.m_textBlock.content = this.m_textElement; this.m_textLine = this.m_textBlock.createTextLine(null, this.m_iWidth); this.addChild(this.m_textLine); } public function Reset():void { /* this.removeChild(this.m_textLine); this.m_textLine = null; this.m_textElement = new TextElement(this.m_strText, this.m_elementFormat); this.m_textBlock = new TextBlock(); this.m_textBlock.content = this.m_textElement; this.m_textLine = this.m_textBlock.createTextLine(null, this.m_iWidth); this.addChild(this.m_textLine); */ // 修正2013/03/08 this.m_textElement.replaceText(0, this.m_textElement.text.length, this.m_strText); this.m_textBlock.content = this.m_textElement; this.m_textBlock.recreateTextLine(this.m_textLine, null); } public function get text():String { return this.m_strText; } public function set text(value:String):void { this.m_strText = value; this.Reset(); } public function get textWidth():int { return this.m_iWidth; } public function set textWidth(value:int):void { this.m_iWidth = value; this.Reset(); } public function get size():int{ return this.m_iSize; } public function set size(value:int):void { this.m_iSize = value; this.Reset(); } public function get coloe():uint { return this.m_uiColor; } public function set coloe(value:uint):void { this.m_uiColor = value; this.Reset(); } } |
ひとまず解決したけど、なんか腑に落ちない。。。