studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android landscape android-orientation

programacion - Forzar una actividad de Android para usar siempre el modo horizontal



manual de programacion android pdf (14)

¡¡Eso es!! Larga espera por esta solución.

Tengo un problema antiguo con Android sobre el inicio doble de una actividad que requería (programáticamente) modo apaisado: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

Ahora Android hace que el modo Paisaje comience.

Estoy usando el visor de Android VNC en mi HTC G1 . Pero por alguna razón, esa aplicación siempre está en modo horizontal a pesar de que mi G1 está en modo vertical. Dado que el visor de Android VNC es de código abierto, me gustaría saber cómo es posible que el código de una actividad sea "horizontal". Me gustaría cambiarlo para respetar la orientación del teléfono.


Arslan, ¿por qué quieres forzar la orientación pro gramaticalmente, aunque ya hay una forma en manifest <activity android:name=".youractivityName" android:screenOrientation="portrait" />


El siguiente es el código que utilicé para mostrar toda la actividad en modo paisaje:

<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="abcActivty"/>


En el manifiesto:

<activity android:name=".YourActivity" android:screenOrientation="portrait" android:configChanges="orientation|screenSize">

En tu actividad:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.your_activity_layout);


En mi OnCreate(Bundle) , generalmente hago lo siguiente:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);


Esto funciona para Xamarin.Android. En OnCreate ()

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;


Hacerlo en el código es incorrecto y aún más si lo pones en onCreate. Hazlo en el manifiesto y el "sistema" conoce la orientación desde el inicio de la aplicación. Y este tipo de meta o "guía" de nivel superior DEBERÍA estar en el manifiesto. Si quiere demostrarlo a usted mismo, establezca un descanso en Activity onCreate. Si lo hace en el código, se ejecutará dos veces: se iniciará en modo retrato y luego cambiará a paisaje. Esto no ocurre si lo haces en el manifiesto.


Mirando el AndroidManifest.xml ( link ), en la línea 9:

<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">

Esta línea especifica la screenOrientation la screenOrientation como horizontal, pero el autor va más allá anulando cualquier cambio en la orientación de la pantalla con configChanges="orientation|keyboardHidden" . Esto apunta a una función anulada en VncCanvasActivity.java.

Si observa VncCanvasActivity, en la línea 109 está la función anulada:

@Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation/keyboard change super.onConfigurationChanged(newConfig); }

El autor específicamente puso un comentario para ignorar cualquier cambio de teclado o orientación.

Si desea cambiar esto, puede volver al archivo AndroidManifest.xml que se muestra arriba y cambiar la línea a:

<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">

Esto debería cambiar el programa para cambiar de vertical a horizontal cuando el usuario gira el dispositivo.

Esto puede funcionar, pero podría estropear el aspecto de la GUI, dependiendo de cómo se creó el diseño. Tendrás que dar cuenta de eso. Además, dependiendo de cómo se codifiquen las actividades, puede observar que cuando se cambia la orientación de la pantalla, los valores que se rellenaron en los cuadros de entrada desaparecen. Esto también puede tener que ser manejado.


Para Android 4.0 (Ice Cream Sandwich) y más tarde, necesitaba agregar estos, además del valor del landscape .

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

Usar solo la keyboardHidden|orientation aún resultaría en pérdidas de memoria y recreación de mis actividades al presionar el botón de encendido.


Presione CTRL+F11 para rotar la pantalla.


Puede especificar la orientación de una actividad en el manifiesto. Mira aquí .

<activity android:allowTaskReparenting=["true" | "false"] ... android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nosensor"] ... "adjustResize", "adjustPan"] >


Puede establecer los mismos datos en su código de Java también.

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Otros valores en ActivityInfo le permitirán volver a configurar el retrato dirigido o el retrato bloqueado. Personalmente, me gusta establecerlo en algo en el Manifiesto como se sugiere en otra respuesta a esta pregunta y luego cambiarlo más tarde utilizando la llamada anterior en el SDK de Android si es necesario.


Una solución rápida y sencilla para el archivo AndroidManifest.xml, agregue lo siguiente para cada actividad que desee forzar al modo apaisado:

android:screenOrientation="landscape"


Utilice ActivityInfo (android.content.pm.ActivityInfo) en su método onCreate antes de llamar al método setLayout como este

this.setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);