控制虛擬鍵盤行為

當使用者在文字欄位或特別設定的互動式物件內輕點時,執行階段會自動開啟虛擬鍵盤。當鍵盤開啟後,執行階段會依循原生平台平移與調整應用程式內容大小的慣例,讓使用者在輸入時可以看到文字。

鍵盤開啟後,成為焦點的物件會依序傳送下列事件:

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 ); 
    } 
} 
}