Retrato para teléfono, paisaje para tableta (Android-Layout)

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 locking de orientación de lo que he visto, lo que frustra el propósito de querer dos orientaciones separadas para los dispositivos.

Tablets: Landscape Phones: Portrait

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.

¡Gracias!

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 el sensor de orientación del dispositivo estableciendo el atributo en la etiqueta de actividad en el archivo de manifiesto de esta manera:

android:screenOrientation="nosensor" 

Cuando ejecuta su aplicación, de forma predeterminada la orientación vertical está configurada para teléfonos y paisaje para tabletas (y por lo tanto, seleccionará el archivo xml de layout-xlarge-land ). Y como ha configurado un locking de orientación, permanece en esta orientación.

Puede medir el tamaño real (en pulgadas) del dispositivo y establecer la orientación mediante progtwigción utilizando:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

o

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Para obtener el tamaño físico del dispositivo, puede usar el código publicado aquí .

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

No estoy del todo seguro de lo que dices, pero parece que 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?

establezca un diseño llamado llTablet en el menú de diseño en los diseños de carpeta “layout-large” y un diseño de llPhone 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; }