2012-02-13 13 views
6

Tengo una situación en la que, si el dispositivo Android es una tableta, entonces quiero que la orientación esté habilitada (vertical y horizontal), mientras que si el dispositivo es un teléfono, quiero que la orientación sea solo en modo vertical. ¿Puede ayudarme a hacer esto?¿Cómo establecemos la orientación de una actividad en Android, basada en el dispositivo?

Gracias, Nithin

+0

+ 1 por buen concepto. – Praveenkumar

+0

verifique http://stackoverflow.com/questions/4616176/android-orientation-change –

+0

y http: //www.workingfromhere.com/blog/2009/03/30/orientation-sensor-tips-in-android/ –

Respuesta

0

Puede utilizar this clase para obtener la información de los dispositivos de la generación actual, extraído de las propiedades del sistema.

Para establecer el atributo propiedades de orientación, el uso siguiente ...

android:screenOrientation=["unspecified" | "user" | "behind" | 
            "landscape" | "portrait" | 
            "reverseLandscape" | "reversePortrait" | 
            "sensorLandscape" | "sensorPortrait" | 
            "sensor" | "fullSensor" | "nosensor"] 
+0

No funciona. Esto es hardcoding en el manifiesto! Por lo tanto, es lo mismo para tabletas y teléfonos. – nithinreddy

+0

No puede establecer la orientación de forma dinámica antes de ejecutar realmente el programa. Use el predeterminado, para permitir que varíe según las preferencias del dispositivo y la forma en que el usuario gira la pantalla. O "nosensor" para la orientación preferida del dispositivo. –

0

obtener el ancho y la altura de la pantalla del dispositivo, si la resolución es menor que la de la tableta, entonces se puede establecer la orientación de la aplicación al retrato.

Si necesita las dimensiones de la pantalla en píxeles de la actividad, puede utilizar getSize:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

Si no es una actividad que puede obtener la pantalla por defecto a través WINDOW_SERVICE:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 

if(width<= (resolution width of tablet) && height<=(resolution height of tablet)) 
{ 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

No dé cualquier comando en manifiesto basado en

android: screenOrientation

+0

¿Por qué downvote? ¿Esta respuesta no es posible? –

+0

Creo que esto funciona ... lo intentaré ... ¡gracias! – nithinreddy

0

Soy solo un principiante en esto, ¿pero quizás sería posible hacerlo apuntando a un nivel API específico o ppp? Puede proporcionar recursos alternativos para los diferentes dispositivos a los que se dirige.

Por ejemplo:

res/layout/main.xml 
res/layout-xhdpi/main.xml 
res/layout-v11/main.xml 

Una buena documentación de que se puede encontrar here.

1

usted tiene 2 métodos:

a) crear diferentes conjuntos de diseño y dibujables para el teléfono y la tableta por separado y diseñarlos de acuerdo a la orientación que necesita.

b) Compruebe el dispositivo en funcionamiento durante el tiempo de ejecución y configure la orientación. Para comprobar el dispositivo, dar un cheque en los siguientes parámetros y establecer la orientación programática,

(1) Build.VERSION.SDK_INT 
    (2) Configuration.SCREENLAYOUT_SIZE_MASK 
1

probar este Funciona perfectamente para mí .....

if (isXLargeScreen()) 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

y esta función para decida entre la tableta y los teléfonos, se llama en el IF anterior .....

public static boolean isXLargeScreen(Context context) { 
return (context.getResources().getConfiguration().screenLayout 
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; 
} 
Cuestiones relacionadas