В AIR можно отключить поведение панорамирования и изменения размеров по умолчанию, связанное с вызовом экранной клавиатуры, задав элементу
softKeyboardBehavior
в дескрипторе приложения значение
none
.
<softKeyboardBehavior>none</softKeyboardBehavior>
При выключении автоматического поведения приложение должно будет соответствующим образом корректировать свой экран. Событие softKeyboardActivate отправляется, когда открывается клавиатура. При отправке события
softKeyboardActivate
свойство
softKeyboardRect
рабочей области содержит размеры области, занятой открытой клавиатурой. Используйте эти размеры для перемещения или изменения размера содержимого, чтобы оно правильно отображалось, когда открывается клавиатура для ввода текста. (После закрытия клавиатуры все размеры прямоугольника softKeyboardRect равны нулю.)
При закрытии клавиатуры отправляется событие
softKeyboardDeactivate
, и можно восстановить обычное отображение приложения.
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;
}
}
}
Примечание.
В Android возможны условия, в том числе при работе в полноэкранном режиме, когда точные размеры клавиатуры невозможно получить из операционной системы. В этих случаях используется предполагаемый размер. Кроме того, в альбомной ориентации для ввода текста используется собственная полноэкранная клавиатура IME (редактора метода ввода). Эта клавиатура IME имеет встроенное текстовое поле ввода и закрывает всю рабочую область. Нет возможности отображения альбомной клавиатуры, которая занимает не весь экран.