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.