¿Cómo puedo controlar correctamente la orientación del escenario en Android con AIR mobile?
Tengo una aplicación de AIR que deseo bloquear en orientación horizontal. Nunca quiero que la aplicación gire al modo de retrato. La solución de Adobe para este problema, aparentemente, sería configurar mi archivo * -app.xml como sigue:
<!-- The initial aspect ratio of the app when launched (either "portrait" or "landscape"). Optional. Mobile only. Default is the natural orientation of the device --> <aspectRatio>landscape</aspectRatio> <!-- Whether the app will begin auto-orienting on launch. Optional. Mobile only. Default false --> <autoOrients>false</autoOrients>
Esto funciona la mayor parte del tiempo, pero no siempre. Por ejemplo, si la pantalla de mi dispositivo se desactiva mientras Flash Builder empaqueta y despliega mi APK, la aplicación se inicia en un estado semi-roto donde su relación de aspecto Es paisaje pero todo se ha medido con dimensiones de retrato. En otros dispositivos, como mi Google Nexus (Android 4.1), la aplicación se inicia correctamente (en modo horizontal), pero si apago la pantalla, giro el dispositivo al modo vertical y vuelvo a encender la pantalla. Girado de nuevo en el modo retrato. Lo que es peor, ningún evento StageOrientationEvent.ORIENTATION_CHANGE se envía incluso para indicar que esto ha sucedido.
- Eliminar contorno de derivación del elemento de anclaje en el dispositivo Android visto con Firefox móvil
- Buenos ejemplos de tours en la aplicación / tutoriales / tutoriales en Android o iPhone
- PHP zip descargar el error
- JavaScript caret position
- Jquery, ¿cómo probar un navegador móvil?
He intentado una variante de la aproximación antedicha, que es programar por programa la orientación del dispositivo:
private function onAddedToStage( event:Event ):void { stage.autoOrients = false; stage.setOrientation( StageOrientation.ROTATED_RIGHT ); }
Este enfoque tiene los mismos problemas mencionados anteriormente.
También he intentado el acercamiento mencionado en este otro hilo del apilamiento de la pila . En lugar de desactivar la orientación automática, he intentado escuchar StageOrientationEvent.ORIENTATION_CHANGE e impedir que el dispositivo entre en modo retrato:
private function onAddedToStage( event:Event ):void { stage.addEventListener( StageOrientationEvent.ORIENTATION_CHANGE, onStageOrientationChange, true, int.MAX_VALUE ); } private function onStageOrientationChange( event:StageOrientationEvent ):void { switch( event.afterOrientation ) { case StageOrientation.DEFAULT: case StageOrientation.UPSIDE_DOWN: case StageOrientation.UNKNOWN: event.preventDefault(); break; case StageOrientation.ROTATED_RIGHT: case StageOrientation.ROTATED_LEFT: break; } }
Esto, también, parece funcionar sólo una parte del tiempo. En muchos casos, event.preventDefault () no tiene efecto y la aplicación gira de todos modos.
Así que … mi pregunta a otros desarrolladores de AIR que hay es: ¿Alguien sabe de una manera de bloquear de forma fiable un dispositivo en una sola orientación?
- Javascript android window.onorientationchange se dispara continuamente
- Flurry Analytics vs Google Analytics en la plataforma móvil
- Mejores prácticas para seleccionar una base de datos para aplicaciones móviles
- Bootstrap de Twitter: no se cambia el tamaño de la barra de navegación en el cambio de orientación (solo con el navegador de acciones de Android)
- Convención de nomenclatura de ID de Android: minúsculas con subrayado vs. caso de camello
- Qt versiones para arquitecturas mips, brazo, x86 faltan
- Elementos relativamente posicionado en desplazable absolutamente posicionado div "retraso" en el desplazamiento
- ¿Qué debo tener en cuenta al portar javascript mousedown / mouseup / mousemove / keypress oyentes a móviles?
Aquí está el enfoque que he encontrado para trabajar para mí, en Android 2.3 (Fire and Nook), así como 4.1 (Nexus 7). No he probado con más dispositivos todavía, pero hasta ahora parece prometedor.
En primer lugar, he configurado mi configuración -app.xml de la siguiente manera:
<aspectRatio>landscape</aspectRatio> <autoOrients>false</autoOrients>
Luego he añadido el siguiente código a mi chispa Aplicación:
private function onAddedToStage():void { stage.addEventListener( Event.RESIZE, onStageResize ); NativeApplication.nativeApplication.addEventListener( Event.ACTIVATE, onNativeApplicationActivate ); } private function onStageResize( event:Event ):void { checkForOrientationChange(); } private function onNativeApplicationActivate( event:Event ):void { checkForOrientationChange(); } private function checkForOrientationChange():void { if ( height > width ) { if ( stage ) { stage.setOrientation( StageOrientation.ROTATED_RIGHT ); } else { // The first ACTIVATE event occurs before the Application has been added to the stage callLater( checkForOrientationChange ); } } }
- Cómo acceder a un archivo js desde otro archivo js en titanium studio android project
- ¿Está bien utilizar matriz estática como una base de datos fija para mostrar una lista de palabras?