2010-04-18 20 views
13

He tratado de congelar la orientación usando:¿Cómo se bloquea la orientación de la aplicación (horizontal o vertical)?

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Aunque la pantalla se queda en orientación vertical, la actividad está siendo recreada. ¿Alguna idea de como resolver esto?

¿Cómo se puede bloquear la orientación de la aplicación de modo que la actividad no se vuelva a crear en el cambio de orientación?

Respuesta

40

Primero, no use setRequestedOrientation() si puede evitarlo. Use el atributo android:screenOrientation en su elemento de manifiesto <activity> en su lugar.

En segundo lugar, también necesitará android:configChanges="keyboardHidden|orientation" en su elemento de manifiesto <activity> para evitar el ciclo de destrucción/recreación.

4

Un ejemplo más específico de la sección de actividad de la AndroidManifest.xml para la orientación vertical:

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:configChanges="keyboardHidden|orientation|screenSize"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Dónde android:screenOrientation Define la orientación inicial y android:configChanges anula los eventos que desencadena los métodos del ciclo de vida correspondientes en la pantalla cambia

3

Prueba esto:

1.- Establecer la orientación de la pantalla deseada en su AndroidManifest.xml

android:screenOrientation="portrait|landscape" 

Se debe tener este aspecto:

<application 
    android:allowBackup="true" 
    android:icon="~icon path~" 
    android:label="~name~" 
    android:supportsRtl="true" 
    android:screenOrientation="portrait" 
    android:theme="@style/AppTheme"> 
    </application> 

2.- Agregue esto a su onCreate void (o donde quiera) en su archivo de actividad Java (Ejemplo: "MainActivity.java"):

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); 

Se debe tener este aspecto:

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

Ahora la pantalla no se moverá incluso si la rotación de la pantalla está en en el dispositivo.

Cuestiones relacionadas