En AIR es posible desactivar el comportamiento de desplazamiento y cambio de tamaño asociado a la aparición de un teclado virtual si se establece el elemento
softKeyboardBehavior
del archivo descriptor de la aplicación como
none
:
<softKeyboardBehavior>none</softKeyboardBehavior>
Cuando se desactiva el comportamiento predeterminado, es responsabilidad de la aplicación llevar a cabo los ajustes necesarios para la visualización. Cuando se muestra el teclado, se distribuye un evento softKeyboardActivate. Cuando se distribuye el evento
softKeyboardActivate
, la propiedad
softKeyboardRect
del escenario contiene las dimensiones del área oscurecida por el teclado abierto. Utilice estas dimensiones para mover o cambiar de tamaño el contenido y que se visualice correctamente cuando se muestra el teclado y el usuario está escribiendo. (Cuando el teclado se cierra, las dimensiones del rectángulo softKeyboardRect son todas de cero.)
Cuando el teclado se cierra, se distribuye un evento
softKeyboardDeactivate
y la pantalla de la aplicación puede volver a normal.
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;
}
}
}
Nota:
en Android, hay casos (incluido el modo de pantalla completa) en los que el sistema operativo no expone las dimensiones exactas del teclado. En esa situación, no queda más remedio que calcular el tamaño. También, en orientación horizontal, el teclado IME nativo en pantalla completa se utiliza para la introducción de texto. Este teclado IME cuenta con un campo de introducción de texto incorporado y oscurece todo el escenario. No hay modo alguno de visualizar un teclado horizontal que no rellene la pantalla.