2012-05-31 13 views
12

Nel mio manifest ho impostato un'attività limitata all'orientamento verticale. Ma ho bisogno di rimuovere questa restrizione a condizione. Quindi, come ottengo la rimozione delle restrizioni di orientamento a livello di codice?Rimuovere i limiti di orientamento a livello di programmazione

UPD: le mie impostazioni presenti sono:

<activity 
     android:name=".activity.MainActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar" 
     android:screenOrientation="portrait" 
     android:configChanges="orientation"> 


/** 
* Defines whether the device being used is a tablet and if so adds horizontal orientation option. 
*/ 
    protected void _updateScreenOrientationModes(){ 
     if(((MyApplication) getApplication())._isTablet == true) 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
     } 

risposta

18

O se non hai impostato android:screenOrientation nel vostro manifesto, di programmazione è possibile impostare l'orientamento con Activity.setRequestedOrientation().

In sostanza, eliminando "l'restrizione" si ottiene

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

dopo di che l'attività esporrà il comportamento predefinito di cambiare l'orientamento dello schermo quando il fisico cambia l'orientamento del dispositivo.

È probabile, tuttavia, che si desideri effettivamente abbinare l'attuale orientamento fisico del dispositivo allo stesso tempo. Non l'ho provato, ma sono abbastanza sicuro che se tutto ciò che hai fatto fosse il precedente, se il dispositivo fosse fisicamente in orientamento orizzontale quando lo facevi, rimarrai in modalità verticale finché non sposterai fisicamente il dispositivo per ritratto e ritorno al paesaggio.

Quello che farei è assicurarsi di impostare android:configChanges="orientation" nel manifest e ignorare Activity.onConfigurationChanged(), in cui è possibile, in base alle proprie condizioni, eseguire la modifica dell'orientamento o memorizzare l'orientamento nella cache. Quindi, ogni volta che le condizioni cambiano, avrai l'orientamento fisico corrente a portata di mano in modo da poterlo modificare a quel punto se necessario.

+0

Ci ho pensato anche io :). Ma il metodo con il file non funziona. – user1384991

+0

Funziona sicuramente per me su alcuni dispositivi. Sei sicuro di aver effettivamente raggiunto la chiamata a setRequestedOrientation()? –

+0

ok, ho funzionato - grazie – user1384991

1

livello di programmazione è possibile modificare i vostri orientamenti dello schermo utilizzando "setRequestedOrientation()"

Nella classe Java scrivere il seguente codice secondo la vostra condizione necessaria. ....

per passare alla modalità ritratto, utilizzare la costante ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Per passare alla modalità ritratto, utilizzare la costante ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
+0

Intendevo rimuovere la restrizione per consentire a Android di decidere quale orientamento utilizzare, quindi se ho un ritratto definito in Manifest, ma ho bisogno di rimuovere questa restrizione - non è chiaro a quale parametro deve essere impostato l'orientamento - l'utente potrebbe essere tenendo il suo dispositivo in orizzontale così come l'orientamento verticale - come definisco quale viene utilizzato? Devo consentire ai tablet di avere sia gli orientamenti che i portatili solo in verticale. Rispetto alla risposta - quando un utente di tablet avvia l'app come definisco il suo * * mantenendo ** l'orientamento e il layout impostato su appropriato? – user1384991

+0

Inoltre, temo che questo metodo non consenta entrambi gli orientamenti poiché limita un particolare. Ho provato fino ad ora SCREEN_ORIENTATION_UNSPECIFIED ma invano – user1384991

+1

I seguenti lavori di SCREEN-ORIENTATION-OFFLINE, l'ho usato. qualunque cosa tu rappresenti nel tuo manifest, se specifichi questa chiamata nel codice java significa che per impostazione predefinita verrà visualizzata in modalità Ritratto. –

2

Ho intenzione di lasciare la mia altra risposta, in quanto affronta la domanda più generale che hai chiesto. Tuttavia, in un commento a qualcun altro che ha detto:

ho bisogno per consentire compresse di avere entrambi gli orientamenti e telefoni unico ritratto

vostro caso particolare è in realtà più semplice rispetto al caso generale: Rimuovere entrambe android:screenOrientation="portrait" e android:configChanges="orientation" dal tuo manifest per consentire il comportamento predefinito. Poi, durante l'avvio, se il dispositivo è un telefono, forzare orientamento verticale con

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Un dispositivo sarà ovviamente mai cambiare tra l'essere un tablet o un portatile in fase di esecuzione, in modo che solo bisogno di fare questo, una volta, in fase di avvio . I tablet avranno il comportamento predefinito, quindi qualunque sia l'orientamento fisico del dispositivo, è quello che useranno. I portatili saranno costretti in verticale e resteranno in questo modo.

Problemi correlati