2012-04-09 14 views
5

La aplicación que estoy desarrollando contiene 2 diseños diferentes: uno para teléfonos normales, otro para tabletas pequeñas como NOOKcolor. La decisión que se toma se basa en la resolución del ancho de la pantalla (actualmente 600 ppp). Se ve muy bien en Nook, pero terrible en HTC Rezound, que tiene una pantalla de 720 x 1280. En este último, independientemente de una resolución más alta, todo (texto, imágenes, etc.) se ve mucho más grande, por lo que todo se acumula.Android: ¿detectar una tableta pequeña frente a un teléfono grande?

¿Cuál sería una buena forma de elegir el dispositivo correcto? Tal vez detectar tamaño físico (4.3 "vs 7") vs resolución?

+0

No es una máscara de bits Configuration.screenLayout - ver aquí http://stackoverflow.com/questions/5015094/determin-device-screen-category-small-normal-large-xlarge-using-code – dag

Respuesta

4

utilizar el siguiente método para detectar el tamaño de la pantalla del dispositivo:

/** 
    * Checks if the screen size is equal or above given length 
    * @param activity activity screen 
    * @param screen_size diagonal size of screen, for example 7.0 inches 
    * @return True if its equal or above, else false 
    */ 
    public static boolean checkScreenSize(Activity activity, double screen_size) 
    { 
     Display display = activity.getWindowManager().getDefaultDisplay(); 
     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     display.getMetrics(displayMetrics); 

     int width = displayMetrics.widthPixels/displayMetrics.densityDpi; 
     int height = displayMetrics.heightPixels/displayMetrics.densityDpi; 

     double screenDiagonal = Math.sqrt(width * width + height * height); 
     return (screenDiagonal >= screen_size); 
    } 
+0

Aha! ¡La densidad es la clave aquí! Gracias, esto parece funcionar – Bostone

+0

¿Qué? Puse 7.0 como parámetro de entrada, y devuelve falso para mi Kindle Fire. –

+0

extraño, porque lo probé en mi dispositivo y funciona perfectamente bien. intente iniciar sesión en 'screenDiagonal' antes de * return * y vea lo que realmente calcula para su dispositivo – waqaslam

1

Consulte la documentación para Supporting Multiple Screens. Puede seguir una estructura predeterminada de nombres de carpetas para que Android cargue diferentes diseños y maquetables para diferentes tamaños de pantalla/densidades.

Por ejemplo:

res/layout/my_layout.xml    // layout for normal screen size ("default") 
res/layout-small/my_layout.xml  // layout for small screen size 
res/layout-large/my_layout.xml  // layout for large screen size 
res/layout-xlarge/my_layout.xml  // layout for extra large screen size 
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation 

res/drawable-mdpi/my_icon.png  // bitmap for medium density 
res/drawable-hdpi/my_icon.png  // bitmap for high density 
res/drawable-xhdpi/my_icon.png  // bitmap for extra high density 
+0

Para pre-honeycomb esto es algo inútil – Bostone

Cuestiones relacionadas