StageText は OS ネイティブのテキスト入力を呼び出すクラスです。AIR 3 から利用可能で、Android や iOS で提供されている、便利機能付きの入力フィールドがそのまま使えるようになります。
先日の記事 (Adobe AIR と ActionScript Native Extensions) でも触れたように、ネイティブアプリとの差を埋めることが AIR 3 の主要なゴールであることが伺えます。
一見良さげな StageText ですが、表示オブジェクトではないため、特殊な扱いが要求されたり、フィールド内の描画を OS が行うため、埋め込みフォントが使えない、などの制限があります。
それから、StageText は、AIR アプリが実行されるプラットフォームによって (当然ながら) その振る舞いが異なります。特定の機能を利用する場合は、各プラットフォームでの動作確認が必要になることもありそうです。
ベータ版の ASDoc によると、StageText はデスクトップ環境でも利用できるものの、OS のテキストフィールドではなく Flash のテキストフィールドを使った実装になるようです。おそらく、デスクトップ上ではネイティブのテキストフィールドを利用する利点があまり無いから、ということでしょう。
StageText の使い方
StageText を表示するには、インスタンスを生成して、stage オブジェクトを関連付け、viewport 属性に表示領域を指定する、という手順を踏みます。
StageText で複数行を扱う場合は、StageTextInitOptions を使ってインスタンスの生成時に指定します。1 行だけでよければ、コンストラクタに引数を指定する必要はありません。
import flash.text.StageText; import flash.text.StageTextInitOptions; var stageText:StageText; var stageTextInitOptions:StageTextInitOptions; // 複数行表示の場合 true を指定 stageTextInitOptions = new StageTextInitOptions(true); // StageTextのインスタンスを生成 stageText = new StageText(stageTextInitOptions); // stageオブジェクトを属性に指定(表示リストには追加できないため) stageText.stage = this.stage; // stage内での表示位置と表示領域の大きさを指定 stageText.viewPort = new Rectangle(0,0,200,100);
StageText は全ての表示オブジェクトの上に表示されます。StageText の上に被せて別のオブジェクトを表示することはできません。
そのため、StageText をビットマップデータとして書き出す drawViewPortToBitmapData メソッドが用意されています。ビットマップ化されるのでテキストの編集はできなくなりますが、他の表示オブジェクトと組み合わせた表現が可能になります。
var bitmapData:BitmapData; bitmapData = new BitmapData(stageText.viewPort.width, stageText.viewPort.height); // StageText をビットマップデータとして書き出し stageText.drawViewPortToBitmapData(bitmapData); // 表示リストにビットマップ化した StageText を追加 addChild(new Bitmap(bitmapData)); // StageText は非表示に変更 stageText.visible = false;
StageText は表示リストに属さないため、関連するイベントが Stage からディスパッチされることはありません。フォーカス処理やキー入力のイベントリスナは、直接 StageText のインスタンスに追加します。
stageText.addEventListener(KeyboardEvent.KEY_UP, onKeyUp, false,0,true);
StageText のインスタンスを同時に複数使うことは避けた方が良いそうです。
便利なオプション
StageText ではいくつかの便利なオプションが利用できます。
主なものは、
- returnKeyLabel 属性: 入力完了のキーのラベルを指定できる。指定可能なオプションは以下の通り
- ReturnKeyLabel.DEFAULT
- ReturnKeyLabel.DONE
- ReturnKeyLabel.GO
- ReturnKeyLabel.NEXT
- ReturnKeyLabel.SEARCH
- softKeyboardType 属性:表示されるキーボードの種類を指定できる。指定可能なオプションは以下の通り
- SoftKeyboardType.CONTACT
- SoftKeyboardType.DEFAULT
- SoftKeyboardType.EMAIL
- SoftKeyboardType.NUMBER
- SoftKeyboardType.PUNCTUATION
- SoftKeyboardType.URL
などがあります。
ボーダー (枠線) について
StageText は周囲にボーダーを持ちません。そのため、ボーダーが欲しければ自分で描く必要があります。
しかし、StageText には、フォントの大きさや配置状況に関する情報を提供する手段が無いようです。とすると、全てのプラットフォームで正確にボーダーを引くのは難易度が高そうです。
楽をしたい人は、GitHub に NativeText という StageText のラッパークラスが提供されているので、これを利用するのが良さそうです。NativeText クラスは上で紹介したビットマップ生成機能などもサポートしています。
Flex を使う人は、Spark の TextInput が StageText に対応する予定とのことなので、特別に StageText を意識しなくてもネイティブのテキスト入力が使えるようになりそうです。
コメントする