2011-08-21 18 views
5

Tengo una actividad. Esta actividad funciona en modo vertical o modo horizontal. En modo horizontal, cargo un nuevo diseño para mostrar un gráfico. para detectar la orientación, he creado esto en mi manifiesta:Desactivar orientación pero detectar orientación

android:screenOrientation="sensor" android:configChanges="orientation" 

Funciona perfectamente, porque cuando doy la vuelta a mi teléfono, se carga el nuevo diseño. Pero, en el modo paisaje, el usuario puede desactivar/activar la rotación con un botón (es un conmutador).

de escribir este código:

public void onConfigurationChanged(Configuration pNewConfig) { 
    Log.v(DEBUG_TAG, "Current configuration changes"); 

    if (pNewConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Log.v(DEBUG_TAG, "Screen orientation : LANDSCAPE"); 
     if (pNewConfig.orientation != mCurrentOrientation) { 
      initTestLandscape(); 
      mCurrentOrientation = pNewConfig.orientation; 
     } 
    } else { 
     Log.v(DEBUG_TAG, "Screen orientation : PORTRAIT"); 
     if (!mIsLandscapeLocking 
       && pNewConfig.orientation != mCurrentOrientation) { 
      initTestPortrait(); 
      mCurrentOrientation = pNewConfig.orientation; 
     } 
    } 
    super.onConfigurationChanged(pNewConfig); 
} 

funciona este código, pero cuando el usuario está en modo de paisaje y voltea el teléfono para realizar copias en modo vertical y el bloqueo está activado, el diseño de paisaje voltea en modo vertical ¡y no quiero eso!

He añadido

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

pero este código desactiva el método onConfigurationChanged y no puedo detectar si el usuario voltea el teléfono de nuevo ...

¿Me puede ayudar?

+4

Es muy simple ... Me llama la setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); cuando el usuario bloquea la vista y llama a setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); cuando el usuario se desbloquea ... es tan fácil, ¿cómo no he pensado en esta solución? Disculpas por cualquier inconveniente. (No puedo responder a mi pregunta) – FinalSpirit

+0

Cabe destacar que la solución que ha provisto para usted mismo seguirá comportándose de manera extraña si el usuario se bloquea mientras la vista se gira hacia la derecha en lugar de hacia la izquierda. La vista se volteará boca abajo porque está bloqueando 'SCREEN_ORIENTATION_LANDSCAPE' que solo significa en un lado. Probablemente desee 'SCREEN_ORIENTATION_SENSOR_LANDSCAPE' que lo mantenga en el paisaje, pero aún escuche el sensor desde el dispositivo si el usuario cambia al lado opuesto del teléfono/tableta. – SDJMcHattie

+0

Sí, debe usar SCREEN_ORIENTATION_SENSOR_LANDSCAPE en lugar de SCREEN_ORIENTATION_LANDSCAPE pero cuando publico este tema, estaba en Android 8 y no es compatible con SCREEN_ORIENTATION_SENSOR_LANDSCAPE – FinalSpirit

Respuesta

0

hacer cambios en android: configChanges: -

android:configChanges="orientation|screenSize|keyboard|keyboardHidden" 

después de los cambios que el código debería ser el trabajo