In AIR kunt u de standaardfunctionaliteit voor pannen en vergroten/verkleinen uitschakelen door een virtueel toetsenbord weer te geven. Dat doet u door het element
softKeyboardBehavior
in het toepassingsbeschrijvingsbestand in te stellen op
geen
:
<softKeyboardBehavior>none</softKeyboardBehavior>
Wanneer u de automatische functionaliteit uitschakelt, is het de taak van uw toepassing om eventuele benodigde wijzigingen aan te brengen in de weergave van de toepassing. Er wordt een softKeyboardActivate-gebeurtenis verzonden wanneer het toetsenbord wordt geopend. Wanneer de gebeurtenis
softKeyboardActivate
wordt verzonden, bevat de eigenschap
softKeyboardRect
van het werkgebied de afmetingen van het gebied dat door het geopende toetsenbord wordt verborgen. Gebruik deze afmetingen om de inhoud te verplaatsen of te vergroten/verkleinen, zodat deze goed wordt weergegeven wanneer het toetsenbord wordt geopend en de gebruiker aan het typen is. (Wanneer het toetsenbord niet wordt weergegeven, zijn de afmetingen van het softKeyboardRect-kader nul.)
Wanneer het toetsenbord wordt gesloten, wordt een gebeurtenis
softKeyboardDeactivate
verzonden en kunt u de standaardweergave van de toepassing herstellen.
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;
}
}
}
Opmerking:
Op Android zijn er enkele situaties, zoals de modus Volledig scherm, waarin de precieze afmetingen van het toetsenbord niet beschikbaar zijn vanuit het besturingssysteem. In deze gevallen wordt de grootte geschat. Bovendien wordt in de oriëntatie Liggend het native IME-toetsenbord van volledige grootte gebruikt voor de invoer van alle tekst. Dit IME-toetsenbord heeft een geïntegreerd veld voor tekstinvoer en beslaat het volledige werkgebied. Het is niet mogelijk een toetsenbord in de stand Liggend weer te geven dat niet het volledige scherm beslaat.