2013-02-24 7 views
5

so che è possibile limitare il cambiamento dell'orientamento nel file manifesto per l'applicazione Android, ma mi chiedevo se c'è un modo di fare che a seconda del tipo di dispositivo/dimensione.Prevenire Android cambiamento di orientamento su alcuni dispositivi

Vorrei evitare che sulle piccole/medie telefoni, ma permettere che su grandi telefoni/tablet.

Qual è il modo migliore per farlo? Qualsiasi aiuto sarebbe molto apprezzato.

risposta

6

Per questo, penso che sarà necessario rimboccarsi due cose in una.

  1. primo luogo, avere dimensioni dello schermo del dispositivo
  2. E poi, sulla base di risultati, abilitare o disabilitare l'orientamento.

Per la prima parte:

int screenSize = getResources().getConfiguration().screenLayout & 
     Configuration.SCREENLAYOUT_SIZE_MASK; 

switch(screenSize) { 
    case Configuration.SCREENLAYOUT_SIZE_LARGE: 
     Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show(); 
     break; 
    case Configuration.SCREENLAYOUT_SIZE_NORMAL: 
     Toast.makeText(this, "Normal screen",Toast.LENGTH_LONG).show(); 
     break; 
    case Configuration.SCREENLAYOUT_SIZE_SMALL: 
     Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show(); 
     break; 
    default: 
     Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show(); 
} 

credito: https://stackoverflow.com/a/11252278/450534 (soluzione è stata prontamente disponibili su SO)

E, infine, in base al risultato del codice di cui sopra, sia di questi:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

O

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
+1

+1 per "La soluzione era prontamente disponibile su SO" – Pragnani

+2

@Pragnani: credito dovuto dove è dovuto eh. Non posso rivendicare ciò che non è mio ;-) –

+0

Apprezzo che la soluzione fosse prontamente disponibile in SO ma non potevo averla trovata tramite il titolo della domanda poiché a quel punto non ero consapevole che farlo a livello di programmazione fosse l'unico modo. Speravo che ci fosse un po 'di config. Grazie comunque. – Zyga

1

Beh, potrei sbagliarmi, ma per quanto ne so non c'è modo diretto di fare questo.

È necessario controllare le dimensioni dello schermo a livello di codice e sulla base di ciò, consentire o disabilitare le modifiche di orientamento.

if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
{  
    // screen is large.. allow orientation changes 
} 

else 
{ 
     //restrict orientation 
} 
0

è possibile utilizzare durante l'attività di controllo che onCreate dimensione del dispositivo che avete e chiamare il metodo setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); (o qualsiasi orientamento desiderato per quel formato).

Attenzione che se l'attività non è sull'orientamento richiesto, quella sarà distrutta e una nuova creata.

0

controllo la dimensione dello schermo nel codice e decide di

setRequestedOrientation();

o no

0

È necessario sovrascrivere il public void onConfigurationChanged(Configuration newConfig) e creare la propria logica per controllare la densità e la dimensione dello schermo.

Ma attenzione .. non è una buona pratica.