studio how desde configchanges change boton activity abrir android android-activity android-orientation

how - ¿Cómo desactivo el cambio de orientación en Android?



how to handle orientation change in android (12)

Añadir

android:configChanges="keyboardHidden|orientation|screenSize"

a su manifiesto.

Tengo una aplicación que solo me gustaría usar en modo retrato, así que he definido android: screenOrientation = "portrait" en el archivo XML manifiesto. Esto funciona bien para el teléfono HTC Magic (y también evita los cambios de orientación en otros teléfonos).

Pero tengo un problema con el teléfono HTC G1 porque abro el teclado QWERTY de hardware (no el teclado virtual). Mi actividad permanece en modo retrato, pero parece que se reinicia y pierde todos sus estados. Esto no sucede con la versión HTC Hero .

Mi aplicación es bastante grande, por lo que no quiero que se reinicie y pierda todos sus estados cuando se abre el teclado. ¿Cómo puedo evitar eso?


Como se dijo, establezca android:configChanges de su Actividad (en el archivo de manifiesto) a keyboardHidden|orientation y luego:

1) Anular onConfigurationChanged()

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); //here you can handle orientation change }

2) Agregue esta línea a su actividad en onCreate()

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Es mejor que agregar la misma línea a onConfigurationChanged , porque su aplicación pasará al modo vertical y luego volverá a horizontal (ocurrirá solo una vez, pero es molesto).

También puedes configurar android:screenOrientation="nosensor" para tu actividad (en manifiesto). Pero al usar esta forma no puedes manejar los cambios de orientación en absoluto.


Debe modificar AndroidManifest.xml como se mencionó en Intricaciones (anteriormente Ashton) y asegurarse de que la actividad maneje el evento onConfigurationChanged como quiera que se maneje. Así es como debe verse:

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }


En Visual Studio Xamarin:

  1. Añadir:

using Android.Content.PM; a tu lista de espacios de nombres de actividad.

  1. Añadir:

[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]

como un atributo para tu clase, así:

[Activity(ScreenOrientation = ScreenOrientation.Portrait)] public class MainActivity : Activity {...}


En el archivo AndroidManifest.xml, para cada actividad que desee bloquear, agregue la última línea de screenOrientation :

android:label="@string/app_name" android:name=".Login" android:screenOrientation="portrait" >

O android: screenOrientation = "landscape" .


En el método OnCreate de tu actividad usa este código:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Ahora su orientación se establecerá en retrato y nunca cambiará.


En su archivo androidmanifest.xml :

<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation">

o

@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }


Para bloquear la pantalla por código, debe utilizar la rotación real de la pantalla (0, 90, 180, 270) y conocer su posición natural. En un teléfono inteligente, la posición natural será vertical y en una tableta. será paisaje

Aquí está el código (métodos de bloqueo y desbloqueo), se ha probado en algunos dispositivos (teléfonos inteligentes y tabletas) y funciona muy bien.

public static void lockScreenOrientation(Activity activity) { WindowManager windowManager = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE); Configuration configuration = activity.getResources().getConfiguration(); int rotation = windowManager.getDefaultDisplay().getRotation(); // Search for the natural position of the device if(configuration.orientation == Configuration.ORIENTATION_LANDSCAPE && (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) || configuration.orientation == Configuration.ORIENTATION_PORTRAIT && (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270)) { // Natural position is Landscape switch (rotation) { case Surface.ROTATION_0: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case Surface.ROTATION_90: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; case Surface.ROTATION_180: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; case Surface.ROTATION_270: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; } } else { // Natural position is Portrait switch (rotation) { case Surface.ROTATION_0: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); break; case Surface.ROTATION_90: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case Surface.ROTATION_180: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); break; case Surface.ROTATION_270: activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); break; } } } public static void unlockScreenOrientation(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); }


Siempre he encontrado que necesitas ambos

android:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"


Tenga en cuenta, ninguno de los métodos parece funcionar ahora!

En Android Studio 1, una forma sencilla es agregar android:screenOrientation="nosensor" .

Esto bloquea efectivamente la orientación de la pantalla.


Utilizar esta..

android:screenOrientation="portrait"


Actualización de abril de 2013: No hagas esto. No fue una buena idea en 2009, cuando contesté la pregunta por primera vez, y ahora no es una buena idea. Vea esta respuesta por hackbod por razones:

Evite volver a cargar la actividad con asynctask en el cambio de orientación en Android

Agregue android:configChanges="keyboardHidden|orientation" a su AndroidManifest.xml. Esto le indica al sistema qué cambios de configuración va a manejar usted mismo, en este caso, sin hacer nada.

<activity android:name="MainActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">

Ver la referencia de desarrollador configChanges para más detalles.

Sin embargo, su aplicación puede ser interrumpida en cualquier momento, por ejemplo, por una llamada telefónica, por lo que realmente debería agregar un código para guardar el estado de su aplicación cuando está en pausa.

Actualización: a partir de Android 3.2, también debe agregar "screenSize":

<activity android:name="MainActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation|screenSize">

De la guía del desarrollador Manejo de la configuración, cambie usted mismo

Precaución: A partir de Android 3.2 (nivel de API 13), el "tamaño de la pantalla" también cambia cuando el dispositivo cambia entre orientación vertical y horizontal. Por lo tanto, si desea evitar reinicios en tiempo de ejecución debido a un cambio de orientación al desarrollar para API nivel 13 o superior (según lo declarado por los atributos minSdkVersion y targetSdkVersion), debe incluir el valor "screenSize" además del valor de "orientación". Es decir, debe declarar android:configChanges="orientation|screenSize" . Sin embargo, si su aplicación apunta al nivel de API 12 o inferior, entonces su actividad siempre maneja este cambio de configuración (este cambio de configuración no reinicia su actividad, incluso cuando se ejecuta en un dispositivo Android 3.2 o superior).