2011-08-21 8 views
5

Ho un'attività. Questa attività funziona in modalità verticale o orizzontale. In modalità orizzontale, carico un nuovo layout per mostrare un grafico. Per rilevare l'orientamento, ho creato questo nel mio manifesto:Disabilita l'orientamento ma rileva l'orientamento

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

Funziona perfettamente, perché quando ho capovolgere il mio telefono, il nuovo layout è stato caricato. Ma, in modalità paesaggio, l'utente può disabilitare/abilitare la rotazione con un pulsante (è uno switcher).

ho scritto questo codice:

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); 
} 

questo codice funziona, ma quando l'utente è in modalità orizzontale e lancia il telefono per eseguire in modalità verticale e il blocco è attivo, il layout paesaggio lanci in modalità verticale e io non voglio quello!

Ho aggiunto

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

ma questo codice disabilita il metodo onConfigurationChanged e non riesco a rilevare se l'utente lancia di nuovo il telefono ...

mi potete aiutare?

+4

E 'molto semplice ... chiamo il setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); quando l'utente blocca la vista e chiama setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); quando l'utente sblocca ... è così facile, come faccio a non pensare a questa soluzione? Ci scusiamo per eventuali inconvenienti. (Non posso rispondere alla mia domanda) – FinalSpirit

+0

Vale la pena notare che la soluzione che hai fornito per te stesso si comporterà ancora stranamente se l'utente si blocca mentre la vista viene ruotata a destra anziché a sinistra. La vista si capovolgerà perché stai bloccando su "SCREEN_ORIENTATION_LANDSCAPE" che significa solo da una parte. Probabilmente vuoi "SCREEN_ORIENTATION_SENSOR_LANDSCAPE' che lo tenga in orizzontale ma ascolti il ​​sensore dal dispositivo se l'utente passa al lato opposto del telefono/tablet. – SDJMcHattie

+0

Sì, devi utilizzare SCREEN_ORIENTATION_SENSOR_LANDSCAPE al posto di SCREEN_ORIENTATION_LANDSCAPE ma quando pubblico questo argomento, ero su Android 8 che non supporta SCREEN_ORIENTATION_SENSOR_LANDSCAPE – FinalSpirit

risposta

0

apportare modifiche in Android: configChanges: -

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

dopo le modifiche del codice dovrebbe essere il lavoro