2011-10-05 23 views
22

Así que estoy haciendo una aplicación para Android y quiero forzar la orientación horizontal para tabletas y la orientación vertical para teléfonos. Sin embargo, parece que solo puedo hacer un bloqueo de orientación de lo que he visto, lo que frustra el propósito de querer dos orientaciones separadas para los dispositivos.Retrato para teléfono, paisaje para tableta (Android-Layout)

Tabletas: Paisaje Móviles: Retrato

Para decirlo más técnico.

Tengo un diseño en "res/layout-xlarge-land" para paisajismo en la tableta y tengo el diseño original en "res/layout" y solo quiero usar explícitamente layout-xlarge-land para la tableta . Nada más, esencialmente ÚNICAMENTE usando landscape para dispositivos xlarge.

Gracias!

Respuesta

42

Establecer una orientación particular basada en la densidad del dispositivo puede no funcionar porque hay teléfonos que tienen densidades más altas que las tabletas.

Lo que hice fue desactivar sensor de orientación del dispositivo estableciendo el atributo en la etiqueta de la actividad en el archivo de manifiesto de la siguiente manera:

android:screenOrientation="nosensor" 

Cuando se ejecuta la aplicación, por orientación vertical predeterminado se define para móviles y landscape para tabletas (y por lo tanto seleccionará el archivo xml de layout-xlarge-land). Y como ha configurado un bloqueo de orientación, permanece en esta orientación.

+6

Realmente no me funciona, mi Nexus 7 se considera como teléfono y se muestra en modo retrato. – Nezneika

+0

mi respuesta resuelve este problema, por favor verifíquelo – Dante

+0

¿Cómo configuró un bloqueo de orientación? –

0

No estoy del todo seguro de lo que dices, pero parece que solo debes medir la resolución y actuar en consecuencia. Quiero decir, ¿cómo sabes si se trata de un teléfono o una tableta que no sea la resolución diferente?

+0

Bueno, supongo que para ponerlo más técnico. Tengo un diseño en "res/layout-xlarge-land" para paisajismo en la tableta y tengo el diseño original en "res/layout" y solo quiero usar explícitamente layout-xlarge-land para la tableta. Nada más, esencialmente ÚNICAMENTE usando landscape para dispositivos xlarge. – rwarner

+0

Puede especificar en el código cómo diseñar la pantalla y extraer del diseño apropiado xml en función de las dimensiones de la pantalla. –

1

Se puede medir el tamaño real (en pulgadas) del dispositivo y luego establecer mediante programación la orientación usando:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

o

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Para obtener el tamaño físico del dispositivo que pueda use el código publicado here.

No es 100% exacto, pero es lo suficientemente bueno como para decidir qué rey del dispositivo ejecuta la aplicación.

-2

establece un diseño llamado llTablet en el menú de diseño en los diseños de carpeta "layout-large" y un diseño de teléfono en el menú de diseño en la carpeta "diseño". Por menú me refiero a la primera disposición que el usuario está ingresando. Luego verifica si puedes referenciarlo. Si no puede hacer referencia a llPhone, entonces es una tableta.

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