studio rotación rotacion reinicio para pantalla manejando lite girar gira evitar descargar como bloquear activity android rotation screen

rotacion - Evitar la rotación de pantalla en Android



manejando la rotación de pantalla en android studio (13)

Tengo una de mis actividades que me gustaría evitar que gire porque estoy iniciando una AsyncTask, y la rotación de la pantalla la reinicia.

¿Hay alguna forma de decirle a esta actividad "NO ROTAR la pantalla incluso si el usuario está sacudiendo su teléfono como loco"?


Añadir

android:screenOrientation="portrait"

o

android:screenOrientation="landscape"

al elemento / a <activity> en el manifiesto y listo.


Añadir:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); ... ... ... }


Agrega lo siguiente a tu AndroidManifest.xml

[app> src> main> AndroidManifest.xml]

<activity android:name=".MainActivity" android:configChanges="orientation" android:screenOrientation="portrait"/>

Ejemplo:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="xxx.zzzzzz.yyyyy"> <uses-permission android:name="A-PERMISSION" /> <application> <activity android:name=".MainActivity" android:screenOrientation="portrait" android:configChanges="orientation"> </activity> </application> </manifest>


En lugar de entrar en AndroidManifest, puedes hacer esto:

screenOrientation = getResources().getConfiguration().orientation; getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); ... AsyncTask screenOrientation = getResources().getConfiguration().orientation; @Override protected void onPostExecute(String things) { context.setRequestedOrientation(PlayListFragment.screenOrientation); or context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); }

El único inconveniente aquí es que requiere un nivel de API 18 o superior. Así que básicamente esta es la punta de la lanza.


En su archivo de Manifiesto, para cada Actividad en la que desee bloquear la rotación de pantalla, agregue: si desea bloquearlo en modo horizontal:

<activity ... ... android:screenOrientation="landscape">

o si quieres bloquearlo en modo vertical:

<activity ... ... android:screenOrientation="portrait">


La forma más fácil que encontré para hacer esto fue poner

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

dentro de onCreate, justo después

setContentView(R.layout.activity_main);

asi que...

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }


Puede seguir la lógica a continuación para evitar que la pantalla gire automáticamente mientras se ejecuta su AsyncTask :

  1. Almacene su orientación de pantalla actual dentro de su actividad usando getRequestedOrientation() .
  2. Deshabilite la orientación automática de la pantalla utilizando setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) .
  3. Ejecutar / ejecutar su AsyncTask .
  4. Al final de su AsyncTask restaure su estado de orientación anterior usando setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) .

Tenga en cuenta que hay varias formas de acceder a las propiedades de la Activity (que se ejecuta en el subproceso de la IU) dentro de una AsyncTask . Puede implementar su AsyncTask como una clase interna o puede usar el Activiy mensajes que Activiy su clase de Activiy .


Puedes probar de esta manera

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itclanbd.spaceusers"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".Login_Activity" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>


Si está utilizando Android Developer Tools (ADT) y Eclipse , puede ir a su AndroidManifest.xml -> pestaña de aplicación -> bajar y seleccionar su actividad. Finalmente, seleccione su orientación preferida. Puede seleccionar una de las muchas opciones.


Tienes que agregar el siguiente código en el archivo manifest.xml. La actividad por la que no debe rotar, en esa actividad agregar este elemento

android:screenOrientation="portrait"

Entonces no girará.


Todo lo que necesita es el siguiente atributo en la ACTIVIDAD en AndroidManifest.xml:

android:configChanges="orientation"

Entonces, el nodo de actividad completa sería:

<activity android:name="Activity1" android:icon="@drawable/icon" android:label="App Name" android:excludeFromRecents="true" android:configChanges="orientation"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>


Use AsyncTaskLoader para mantener sus datos seguros incluso si la actividad cambia, en lugar de usar AsyncTask, es una forma mejor de crear aplicaciones que de evitar la rotación de la pantalla.


Actividad.java

@Override public void onConfigurationChanged(Configuration newConfig) { try { super.onConfigurationChanged(newConfig); if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { // land } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { // port } } catch (Exception ex) { }

AndroidManifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name="QRCodeActivity" android:label="@string/app_name" android:screenOrientation="landscape" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>