當使用者在文字欄位或特別設定的互動式物件內輕點時,執行階段會自動開啟虛擬鍵盤。當鍵盤開啟後,執行階段會依循原生平台平移與調整應用程式內容大小的慣例,讓使用者在輸入時可以看到文字。
鍵盤開啟後,成為焦點的物件會依序傳送下列事件:
softKeyboardActivating
事件 — 開始於舞台上顯示鍵盤之前立即傳送。若您對傳送的事件物件呼叫
preventDefault()
方法,則不會開啟虛擬鍵盤。
softKeyboardActivate
事件 — 在
softKeyboardActivating
事件處理完成後傳送。成為焦點的物件傳送此事件時,Stage 物件的
softKeyboardRect
屬性已經更新,以反映虛擬鍵盤遮住的舞台區域。此事件無法取消。
備註:
若鍵盤大小變更,例如使用者變更鍵盤類型時,成為焦點的物件會傳送第二個 softKeyboardActivate 事件。
softKeyboardDeactivate
事件 — 在虛擬鍵盤因任何原因關閉時傳送。 此事件無法取消。
下列範例會在舞台上新增兩個 TextField 物件。上方的 TextField 可避免當您輕點欄位時顯示鍵盤,若已顯示鍵盤,則會將它關閉。下方的 TextField 則示範預設行為。範例會報告這兩個文字欄位所傳送的軟體鍵盤事件。
package
{
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldType;
import flash.events.SoftKeyboardEvent;
public class SoftKeyboardEventExample extends Sprite
{
private var tf1:TextField = new TextField();
private var tf2:TextField = new TextField();
public function SoftKeyboardEventExample()
{
tf1.width = this.stage.stageWidth;
tf1.type = TextFieldType.INPUT;
tf1.border = true;
this.addChild( tf1 );
tf1.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING, preventSoftKe yboard );
tf1.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, preventSoftKe yboard );
tf1.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, preventSoftKeyboard );
tf2.border = true;
tf2.type = TextFieldType.INPUT;
tf2.width = this.stage.stageWidth;
tf2.y = tf1.y + tf1.height + 30;
this.addChild( tf2 );
tf2.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING, allowSoftKeyboard );
tf2.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, allowSoftKeyboard );
tf2.addEventListener( SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, allowSoftKeyboard);
}
private function preventSoftKeyboard( event:SoftKeyboardEvent ):void
{
event.preventDefault();
this.stage.focus = null; //close the keyboard, if raised
trace( "tf1 dispatched: " + event.type + " -- " + event.triggerType );
}
private function allowSoftKeyboard( event:SoftKeyboardEvent ) :void
{
trace( "tf2 dispatched: " + event.type + " -- " + event.triggerType );
}
}
}