2011-10-05 14 views
22

Quindi sto creando un'applicazione per Android e voglio forzare l'orientamento orizzontale per i tablet e l'orientamento verticale per i telefoni. Tuttavia, sembra che posso solo fare un blocco di orientamento da quello che ho visto, che sconfigge lo scopo di volere due orientamenti distinti per i dispositivi.Verticale per telefono, orizzontale per tablet (layout Android)

compresse: Paesaggio Cellulari: Ritratto

Per dirla più tecnico.

Ho un layout in "res/layout-xlarge-land" per l'abbellimento sul tablet e ho il layout originale in "res/layout" e voglio solo usare esplicitamente layout-xlarge-land per il tablet . Niente altro, in pratica SOLO utilizzando il panorama per i dispositivi xlarge.

Grazie!

risposta

42

L'impostazione di un orientamento particolare basato sulla densità del dispositivo potrebbe non funzionare perché esistono telefoni con densità più elevate rispetto ai tablet.

Quello che ho fatto è stato quello di disabilitare sensore di orientamento del dispositivo impostando l'attributo nel tag attività nel file manifesto in questo modo:

android:screenOrientation="nosensor" 

Quando si esegue la vostra applicazione, per orientamento predefinito ritratto è impostato per i telefoni e landscape per tablet (e quindi selezionerà il file xml da layout-xlarge-land). E poiché hai impostato un blocco di orientamento, rimane in questo orientamento.

+6

Non funziona davvero, il mio Nexus 7 è considerato come telefono e mostrato in modalità verticale. – Nezneika

+0

la mia risposta affronta questo problema, per favore controllalo – Dante

+0

Come hai impostato un blocco di orientamento? –

0

Non sono del tutto sicuro di quello che stai dicendo, ma sembrerebbe che tu debba solo misurare la risoluzione e agire di conseguenza. Voglio dire, come fai a sapere se si tratta di un telefono o un tablet ALTRI che la risoluzione è diversa?

+0

Bene, immagino di metterlo più tecnico. Ho un layout in "res/layout-xlarge-land" per l'abbellimento del tablet e ho il layout originale in "res/layout" e voglio usare esplicitamente layout-xlarge-land per il tablet. Niente altro, in pratica SOLO utilizzando il panorama per i dispositivi xlarge. – rwarner

+0

È possibile specificare nel codice come disporre lo schermo e prelevare dal layout appropriato xml in base alle dimensioni dello schermo. –

1

È possibile misurare la dimensione effettiva (in pollici) del dispositivo e quindi impostare a livello di codice l'orientamento utilizzando:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

o

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Per ottenere la dimensione fisica del dispositivo è possibile utilizzare il codice pubblicato here.

E 'preciso al 100%, ma è abbastanza buono per decidere quale re del dispositivo è in esecuzione l'applicazione.

-2

impostare un layout denominato llTablet nel menu Layout nei layout di cartella "layout-large" e un layout llPhone nel menu Layout nella cartella "layout". Per menu mi riferisco al primo layout che l'utente sta inserendo. Quindi controlla se puoi farne riferimento. Se non puoi fare riferimento a llPhone, allora è un tablet.

llPhone = (LinearLayout) findViewById (R.id.llPhone) 
if (llPhone == null) { 
tablet = true; 
} 
else { 
tablet = false; 
} 
Problemi correlati