Gestion des changements d’affichage d’une application

AIR 2.6 et les versions ultérieures

Dans AIR, vous pouvez désactiver le comportement de panoramique et de redimensionnement par défaut associé à l’affichage d’un clavier logiciel en définissant l’élément softKeyboardBehavior dans le descripteur d’application sur none :

<softKeyboardBehavior>none</softKeyboardBehavior>

Lorsque vous désactivez le comportement automatique, il vous incombe d’effectuer les réglages nécessaires sur l’affichage de l’application. Un événement softKeyboardActivate est distribué lors de l’affichage du clavier. Lorsque l’événement softKeyboardActivate est distribué, la propriété softKeyboardRect de la scène contient les dimensions de la scène cachée par le clavier ouvert. Utilisez ces dimensions pour déplacer ou redimensionner votre contenu de façon à ce qu’il s’affiche correctement lorsque le clavier est ouvert et que l’utilisateur effectue une saisie. (Lorsque le clavier est fermé, les dimensions du rectangle softKeyboardRect sont toutes égales à zéro.)

Lors de la fermeture du clavier, un événement softKeyboardDeactivate est distribué et vous pouvez réactiver l’affichage normal de l’application.

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;             
        }         
    } 
}
Remarque : sous Android, il existe des cas où les dimensions exactes du clavier ne sont pas disponibles à partir du système d’exploitation, notamment lorsque le mode plein écran est activé. Dans ces cas, la taille est estimée. Par ailleurs, en mode paysage, le clavier IME plein écran natif est utilisé pour toutes les saisies de texte. Ce clavier IME dispose d’un champ de saisie de texte et cache la totalité de la scène. Il n’existe aucun moyen d’afficher un clavier en orientation paysage qui ne remplit pas l’écran.