Orientation change with MXML

I have been banging my head on the wall trying to figure out how to detect the device orientation on the BlackBerry PlayBook.  I initially tried to use the accelerometer function.  Unfortunately, the listener would continue to activate and determining the exact orientation was a little iffy.  So, a slight move of the device would set off the listener and the redrawing of the screen would keep going until the accelerometer stopped.  This was not a good way to test for orientation, it will be a great way to make a game that required moving the PlayBook around a lot.  After days of searching the internet and the forums I finally stumbled upon the answer.

The way to check the orientation is to determine it through the stage.  However using the Sparks/mxml scripting and not the full as3 coding to make the application, getting to the stage information isn’t very straight forward.  If you trying to add a event listener to the stage as you would in as3, the you get a “null” object error, because the stage hasn’t been instantiated or something.  With the actual solution, you have to go a level above the stage to the systemManager.


systemManager.stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onOrientationChanging );

From there, it is just a matter of determining the correct orientation and then updating the display.


private function onOrientationChanging( event:StageOrientationEvent ):void {
 if(event.afterOrientation == StageOrientation.UPSIDE_DOWN || event.afterOrientation == StageOrientation.DEFAULT ) {
stageSize(false);
 } else {
stageSize(true);
 }
 }

Leave a Reply

Spam Protection by WP-SpamFree

Spam protection by WP Captcha-Free