W środowisku AIR ustawiając dla elementu
softKeyboardBehavior
w deskryptorze aplikacji wartość
none
, można wyłączać domyślny sposób panoramowania i zmieniania rozmiaru powiązany z unoszeniem klawiatury programowej.
<softKeyboardBehavior>none</softKeyboardBehavior>
Po wyłączeniu automatycznego zachowania aplikacja staje się odpowiedzialna za wprowadzanie wymaganych poprawek w wyświetlaniu aplikacji. Otwieranie klawiatury powoduje wywołanie zdarzenia softKeyboardActivate. Gdy jest wywoływane zdarzenie
softKeyboardActivate
, właściwość
softKeyboardRect
stołu montażowego zawiera wymiary obszaru zakrywanego przez otwartą klawiaturę. Korzystając z tych wymiarów, można przemieszczać zawartość lub zmieniać jej rozmiar, tak aby była prawidłowo wyświetlana, gdy jest otwarta klawiatura i gdy użytkownik na niej pisze. (Gdy klawiatura jest zamknięta, wszystkie wymiary prostokąta właściwości softKeyboardRect wynoszą zero).
Gdy klawiatura jest zamykana, następuje wywołanie zdarzenia
softKeyboardDeactivate
i można przywrócić normalny sposób wyświetlania aplikacji.
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;
}
}
}
Uwaga:
W systemie Android istnieją okoliczności, obejmujące między innymi tryb pełnoekranowy, w których nie można uzyskać z systemu operacyjnego dokładnych wymiarów klawiatury. W tych przypadkach rozmiar jest szacowany. Ponadto w orientacjach poziomych dla wszystkich mechanizmów wprowadzania tekstu jest używana klawiatura IME. Ta klawiatura IME ma wbudowane pole wprowadzania tekstu i zakrywa cały stół montażowy. Nie ma możliwości takiego wyświetlenia klawiatury poziomej, aby nie zakrywała ona ekranu.