2011-03-25 15 views
9

Estoy terminando una aplicación de Android, todo lo que resta es adaptar los diseños de interfaz de usuario y los gráficos para varios dispositivos. Necesito elementos particulares colocados en posiciones particulares en la pantalla.Android y admite diseños de pantallas múltiples

Los documentos de Android explican cómo se clasifican las resoluciones de pantalla múltiple y los tamaños, y explican el sistema de etiquetado de recursos. Por ejemplo, tanto WVGA800 (480x800) como WVGA854 (480x854) se clasifican como pantallas de alta densidad normales. Para atender esto, se le pide que cree una carpeta llamada "diseño" (ya presente para "normal") y "drawable-hdpi".

El problema es que esto no hace nada para diferenciar dos dispositivos de la misma clasificación, incluso si usa unidades "dp". ¿Cómo se pueden proporcionar diseños/drawables para WGA800 y para WGA854 por separado?

Las relaciones son lo suficientemente diferentes como para que el usuario advierta fácilmente escalas erróneas, y esto se ve agravado por mi necesidad de cosas como un puntaje y un temporizador para aparecer en un lugar particular contra una imagen de fondo.

El mismo problema se aplica a los pares {WQVGA400 (240x400), WQVGA432 (240x432)} y {WVGA800 (480x800), WVGA854 (480x854)}. ¿Cómo se puede diseñar/dibujar para WQVA400 y WQGA432?

+0

Probablemente no sea la respuesta que está buscando, pero puede obtener el ancho y alto de la pantalla y luego puede cambiar el tamaño de la imagen o poner los puntajes y el temporizador en el lugar correcto. – Rajkiran

Respuesta

15

Creo que estás camino al infierno.

Android se ejecuta en una enorme variedad de dispositivos, más cada semana, y muchos formatos aún no existen, pero presentará nuevas variables. Por lo tanto, incluso si tiene éxito, un nuevo dispositivo con un tamaño de pantalla ligeramente diferente y su aplicación fallará.

Es un error diseñar para Android usando resoluciones de pantalla específicas, y es similar a los problemas que encontraría si forzara que todas las páginas tengan exactamente el mismo tamaño en la web, raramente funciona bien (por ejemplo, incluso un ordenado el sitio de ancho fijo fallará miserablemente en los dispositivos móviles).

Android ha sido diseñado para soportar toda esta variación, pero si tratar de conseguir la representación absoluta-posicionado con precisión de píxel en cada tamaño de la pantalla está nadando contra la corriente. Es probable que sea muy doloroso, lleve mucho tiempo y sea costoso, y probablemente falle. Incluso si tiene éxito, ¿cómo diablos lo probará en todas estas variantes de pantalla? Suena como probar el infierno también.

Recomiendo encarecidamente que acepte que no puede hacer todo exactamente como necesita, y en su lugar mira cómo usar formas de representar objetos de forma fluida, una con relación a la otra, para que la aplicación se vea bien en todas las diferentes variaciones, usando los diferentes diseños para cada grupo de resoluciones para mejorar la experiencia en pantallas de diferentes tamaños.

+2

Teme tanto. ¡Pero necesitaba gritarme! – SK9

+0

Una observación: el ancho de todos los miembros de una clasificación dada es el mismo. ¿Hay alguna declaración de intención para mantenerlo así? – SK9

+0

@ SK9 Creo que es mejor asumir que Android se puede ejecutar en un dispositivo de casi cualquier tamaño, forma, orientación y con cualquier característica presente o ausente (GPS, red, teclado, etc.) y con la pantalla siga los conceptos proporcionados y personalícelos - portrait/land, ldpi/mdpi/hdpi/xhdpi, tamaños de pantalla, etc. No es fácil, pero a la larga menos doloroso, y hay buenas posibilidades de que la aplicación solo funcione en la mayoría de los dispositivos –

2

relación con la respuesta/comentarios en otro lugar de esta página, me gustaría poder escribir otra respuesta a mi propia pregunta llamar la atención sobre el tipo de recursos de pantalla que se puede introducir. No estoy convencido de esto queda claro en la documentación de Android, pero por lo que se refiere a dibujables puede agregar etiquetas tamaño de la pantalla a los archivos dibujable en la parte superior de la etiqueta dpi.

Por ejemplo, es válido agregar una carpeta llamada drawable-large-mdpi y los dispositivos con pantallas grandes y de resolución media extraerán recursos de aquí si pueden. Sin embargo, advirtiendo, cambiar el orden de las etiquetas importa: declarar drawable-mdpi-large es un error.

5

Sí, eso es posible:

En primer lugar hay que crear una instancia de la clase de visualización. Después de eso, obtiene el ancho y el alto de la pantalla. Luego puede verificar cada resolución en un bucle, usando el operador if y establezca la imagen que desea.

Ejemplo:

ImageView iview=(ImageView)findViewById(R.id.imageView1); 
//here are the Bitmaps optimized for each screen resolution 
Bitmap[] bitmaps={BitmapFactory.decodeResource(getResources(), R.drawable.icwvga800),BitmapFactory.decodeResource(getResources(), R.drawable.icwvga854),(...)}; 
// In this list all supported screensizes are defined 
int[][] possibleScreenSolutions={{480,800},{480,854},{240,400},{240,432},{480,800},{480,854}}; 
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); 
int[] ScreenSolution={display.getWidth(),display.getHeight()}; 
// Compare the real screen solution with the all supported ones 
for(int i=0;i<possibleScreenSolutions.length;i++){ 
    if((ScreenSolution[0]==possibleScreenSolutions[i][0])&&(ScreenSolution[1]==possibleScreenSolutions[i][1])){ 
      iview.setImageBitmap(bitmaps[i]);// set the image 
    } 
} 

Estoy de acuerdo con Ollie C: Es demasiado confuso para comprobar todas las resoluciones, pero es al menos posible.

Lo he probado ya: funciona.

Cuestiones relacionadas