Hantera programvisningsändringar

AIR 2.6 och senare

I AIR kan du inaktivera det standardbeteende för panorering och storleksändring som är kopplat till att ett virtuellt tangentbord öppnas genom att ställa in softKeyboardBehavior -elementet i programbeskrivningen på none :

<softKeyboardBehavior>none</softKeyboardBehavior>

När du inaktiverar det automatiska beteendet måste ditt program se till att göra nödvändiga ändringar av programvisningen. En softKeyboardActivate-händelse skickas när tangentbordet öppnas. När softKeyboardActivate -händelsen skickas innehåller egenskapen softKeyboardRect för scenen dimensionerna för det område som döljs av det öppna tangentbordet. Använd de här dimensionerna för att flytta eller ändra storlek på innehållet, så att det visas korrekt när tangentbordet är öppet och användaren skriver text. (När tangentbordet är stängt är alla softKeyboardRect-rektangelns dimensioner noll.)

När tangentbordet stängs skickas en softKeyboardDeactivate -händelse, och du kan återställa programvisningen till den normala.

package  {        
    import flash.display.MovieClip; 
    import flash.events.SoftKeyboardEvent; 
    import flash.events.Event; 
    import flash.display.StageScaleMode; 
    import flash.display.StageAlign; 
    import flash.display.InteractiveObject; 
    import flash.text.TextFieldType; 
    import flash.text.TextField; 
     
    public class PanningExample extends MovieClip { 
                     
        private var textField:TextField = new TextField(); 
         
        public function PanningExample() {             
            this.stage.scaleMode = StageScaleMode.NO_SCALE; 
            this.stage.align = StageAlign.TOP_LEFT; 
             
            textField.y = this.stage.stageHeight - 201; 
            textField.width = this.stage.stageWidth; 
            textField.height = 200; 
            textField.type = TextFieldType.INPUT; 
            textField.border = true; 
            textField.wordWrap = true; 
            textField.multiline = true; 
             
            this.addChild( textField ); 
             
            //track soft keyboard and stage resize events 
            textField.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, onKeyboardChange ); 
            textField.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, onKeyboardChange ); 
            this.stage.addEventListener( Event.RESIZE, onDisplayAreaChange ); 
        } 
     
        private function onDisplayAreaChange( event:Event ):void 
        { 
            textField.y = this.stage.stageHeight - 201; 
            textField.width = this.stage.stageWidth; 
        } 
         
        private function onKeyboardChange( event:SoftKeyboardEvent ):void 
        { 
            var field:InteractiveObject = textField; 
            var offset:int = 0; 
 
            //if the softkeyboard is open and the field is at least partially covered 
            if( (this.stage.softKeyboardRect.y != 0) && (field.y + field.height > this.stage.softKeyboardRect.y) ) 
                offset = field.y + field.height - this.stage.softKeyboardRect.y; 
                 
            //but don't push the top of the field above the top of the screen 
            if( field.y - offset < 0 ) offset += field.y - offset; 
             
            this.y = -offset;             
        }         
    } 
}
Obs! På Android är tangentbordets exakta dimensioner inte tillgängliga från operativsystemet under vissa omständigheter, bl.a. i helskärmsläge. I så fall uppskattas storleken. I liggande orienteringar används dessutom det inbyggda IME-helskärmstangentbordet för all textinmatning. Det här IME-tangentbordet har ett inbyggt fält för textinmatning och döljer hela scenen. Det finns inget sätt att visa ett liggande tangentbord som inte fyller skärmen.