[AS3] 1行の編集可能なTextFlow, Text Layout Framework

2011/07/25

こんにちは。きんくまです。
TLF(Text Layout Framework)で、編集可能なTextFlowを作りたかったです。
そんで、通常だとEnterキーを押すとそのまま改行されてしまうのですが、
それを1行にするように挙動をかえました。

まず、EditManagerのサブクラスを作ります。
キーボードのEnterが押されたときに何もしないようにします。

package
{
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	
	import flashx.textLayout.edit.EditManager;
	import flashx.undo.IUndoManager;
	
	public class CustomEditManagner extends EditManager
	{
		public function CustomEditManagner(undoManager:IUndoManager=null)
		{
			super(undoManager);
		}
		
		override public function keyDownHandler(event:KeyboardEvent):void
		{
			if(event.keyCode != Keyboard.ENTER){
				super.keyDownHandler(event);
			}		
		}
	}
}

次に、それをTextFlowのinteractionManagerにひもづけます。
これで完了です!

package
{
	import flash.display.Sprite;
	import flashx.textLayout.formats.LineBreak;
	
	import flashx.textLayout.container.ContainerController;
	import flashx.textLayout.conversion.TextConverter;
	import flashx.textLayout.edit.EditManager;
	import flashx.textLayout.elements.TextFlow;
	
	[SWF(width="450", height="450", frameRate="30")]
	public class OneLineEditableTLF extends Sprite
	{
		public function OneLineEditableTLF()
		{
			createTextLine();
		}
		
		private function createTextLine():void
		{
			var sp:Sprite = new Sprite();
			addChild(sp);
			sp.x = 100;
			sp.y = 50;
			
			var markup:XML = 

Hello, World

; var textFlow:TextFlow = TextConverter.importToFlow(markup, TextConverter.TEXT_LAYOUT_FORMAT); var containerController:ContainerController = new ContainerController(sp, 200, 16); textFlow.flowComposer.addController(containerController); var editManager:EditManager = new CustomEditManagner(); textFlow.interactionManager = editManager; textFlow.fontSize = 16; textFlow.lineBreak = LineBreak.EXPLICIT; textFlow.flowComposer.updateAllControllers(); } } }

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る