|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
¿Cómo hacer para que se vea bien en diferentes pantallas?
Buenas noches!
Estoy casi terminando la APP pero claro, me queda lo que más miedo me da... que sea adaptable para diferentes pantallas. He estado haciendo la app estos días con mi Xperia Z1 (4.9") y cuando he ido a probarlo en un Xperia M (4") o un LG L70 (4.3") algunos layouts si que "más o menos" no se ven fuera de lugar, pero pero con otras hay que hacer remodelaciones absolutas. Así que estuve Googleando un poco y lo que recomiendan es crear diferentes carpetas: layout-smart / layout-normal / layour-large / layout-xlarge Pero claro, los tres smartphones con los que estoy probando entran todos en la misma carpeta según el Android Studio: layout-normal, luego todas las recolocaciones que estoy haciendo para que en estos que son más pequeños se vean bien, también afectan a los más grandes. Así que directamente os vengo a preguntar, es correcto lo que estoy haciendo? Es mejor otro método, qué he de tener en cuenta? Un saludo y gracias como siempre! |
|
#2
|
||||
|
||||
Si trabajas con DP y Weight la mayoría de las veces con un único "layout" te sobrará. Aunque la gente cuando usa multi layout lo hace con "layout-mdpi", "layout-hdpi", etc. Pero ya te digo que trabajando bien con DP rara vez te hará falta.
Yo mis aplicaciones las hago así y se ven perfectas incluso en Tablet. Otra cosa es que quieras que la distribución sea distinta, como esas aplicaciones que en móvil pulsas un botón para que aparezca el menú y en tablets de 10 pulgadas está todo el tiempo desplegado. |
#3
|
||||
|
||||
Hola compañero.
Lo que intentas hacer está bien. A eso se le llama crear recursos alternativos y se lleva a cabo con multiples tipos de calificadores (entre ellos los que tu intentas usar). Sin embargo existen otros, como por ejemplo los del ancho minimo de pantalla, la misma densidad como lo nombraba el compañero de arriba (hdpi, xhpdi,etc.) o para orientación como lo es landscape y portrait. Puedes leer mas sobre calificadores en la documentación de google: http://developer.android.com/intl/es...resources.html O también leer un tuto que hice sobre recursos y calificadores por si deseas ver más: Uso de recursos en Android
__________________
Desarrollador Android
http://www.hermosaprogramacion.com/ |
#4
|
||||
|
||||
Ya para terminar de liar a _DeV_, además de distintos layouts puedes tener diversos values.
Si los elementos a mostrar son los mismos y básicamente solo cambia algún tamaño de algo que no pueda calcularse automáticamente con weights o RelativeLayout, en vez de crear otro layout prácticamente igual cambiando dos números, ten solo uno y referencia al valor definido en values que ya Android lo sustituirá por el que corresponda según los modificadores. Por lo demás, intenta minimizar el número de layouts y sigue la estrategia de kryogeN. Si ves que tienes dos layouts prácticamente iguales lo más seguro es que puedas unificarlos y añadir ese cambio de otra forma.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#5
|
||||
|
||||
Al final la programación consiste en reutilizar, cuantas más cosas que hagan lo mismo tenga tu aplicación, malo, porque más cosas tendrás que cambiar si hay que hacer una modificación/actualización.
Esto se aplica a las clases y se aplica a los recursos, ¿para qué quieres tener 15 layouts iguales que tienen la misma distribución? Es mejor partirte un poco la cabeza en buscar una distribución genérica que hacer 15 distribuciones que no cambian prácticamente en nada, luego tienes que modificar un elemento y toca hacerlo 15 veces. Y por si fuese poco ahora Google ofrece la PercentRelativeLayout, que soluciona el 80% de los casos para los que antes se usaba Weight. Además de ofrecer una solución de porcentaje tanto horizontal como vertical al mismo tiempo en un único Layout (para poder hacer eso con Weights tienes que anidar 2 LinearLayout) |
#6
|
||||
|
||||
Primero gracias a todos por las respuestas, son ideales.
Por otro lado, el problema que tengo realmente es lo que comenta mocelet: Son tres imagebutton alineados en horizontal, que tienen unos 100dp x 100dp cada uno y claro, en mi Xperia Z1 (4.7") se ven de escándalo, con su espaciado entre ellos tres y sin que se pisen..., pero luego cojo el Xperia M4 (4") y no se pisan, pero están apretujados, demasiado juntos y se ve muy feo. Luego, en otra actividad, tengo un boton casi al final de la misma (abajo en el centro) y en el Xperia Z1 se ve sin problema, pero en el Xperia M4 ni siquiera se ve el botón. Cosas así como puedo solventarlas? Sin aumentar la carga de programación como bien me decís. PD: Lo del weight, por más que miro entre ms layouts no lo he usado para nada, a ver si me podéis comentar un poco sobre eso... (Uso RelativeLayouts en casi todos los casos) Última edición por _DeV_ Día 21/08/15 a las 11:20:23. |
#7
|
||||
|
||||
Primero gracias a todos por las respuestas, son ideales.
Por otro lado, el problema que tengo realmente es lo que comenta mocelet: Os pongo un ejemplo de mi activity main: Son tres imagebutton alineados en horizontal, que tienen unos 100dp x 100dp cada uno y claro, en mi Xperia Z1 (4.7") se ven de escándalo, con su espaciado entre ellos tres y sin que se pisen..., pero luego cojo el Xperia M4 (4") y no se pisan, pero están apretujados, demasiado juntos y se ve muy feo. Luego, en otra actividad, tengo un boton casi al final de la misma (abajo en el centro) y en el Xperia Z1 se ve sin problema, pero en el Xperia M4 ni siquiera se ve el botón. Cosas así como puedo solventarlas? Sin aumentar la carga de programación como bien me decís. PD: Lo del weight, por más que miro entre ms layouts no lo he usado para nada, a ver si me podéis comentar un poco sobre eso... (Uso RelativeLayouts en casi todos los casos) ![]() Por desgracia sólo se aprende a base de ensayo y error, lo único que te puedo decir es: 1) Estudia bien cómo se usan los DP, porque funcionan muy bien en horizontal pero no valen para nada en vertical. Es decir, no te vas a ahorrar un scroll vertical en determinados móviles por usar DP, pero si puedes ahorrarte el horizontal (creo que esto también te aclara la duda del botón que no ves abajo) 2) Si quieres que tu aplicación tenga siempre una cabecera y un pie (como el botón que indicas), tendrás que tener en cuenta que es muy probable que la parte entre ambas tenga que poder scrollearse. Con lo cual tendrás un RelativeLayout que tendrá 3 Layouts dentro, uno con Align_parent_top, otro con Align_parent_bottom, y otro entre ambos, que será el scrolleable. Cómo te digo es jugar y hacer pruebas hasta que quede bien, al final después de mucha práctica consigues que quede bien casi a la primera. |
Gracias de parte de: | ||
#8
|
||||
|
||||
Aparte de todo lo explicado por kriogen y compañía , solo añadir que para mi es muy practico el recurso dimen para aplicar dimensiones segun dpi del layout, para esos botones el weigth te iría de lujo.
Por otro lado cuando alinies objetos en vertical o horizontal mas que relative usa linearLayout te ahorraras muchos dolores de cabeza y que se te amontonen esos botones. |
#9
|
||||
|
||||
![]() Para establecer paddings, márgenes o tamaños de letra es lo mejor.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#10
|
||||
|
||||
Gracias a todos.
Para evitar abrir un nuevo tema, si quiero establecer una limitación minima de pulgadas como puedo hacerlo? Es decir, que la app solo sea descargable en móviles con más de x pulgadas de pantalla (a ver si es posible). Un saludo! |
#11
|
||||
|
||||
Eso se declara en el manifest
Aqui tienes un par de enlaces http://developer.android.com/intl/es...s-element.html http://developer.android.com/intl/es...s-element.html Aunque olvidate de definir por pulgadas. A Android le dan igual las pulgadas, lo que le interesa es el tipo de resolucion (hdpi, xhdpi, xxhdpi...) y el tamaño de pantalla (large, small...)
__________________
|
Gracias de parte de: | ||
#12
|
||||
|
||||
Como dice DexaFree, no puedes, además que no tiene mucho sentido. Ni siquiera puedes establecer cuanto DP como mínimo puedes tener de alto, que realmente es tu problema, pero es que ese problema se resuelve reconfigurando el Layout o poniendo un ScrollView.
|
Gracias de parte de: | ||
#13
|
||||
|
||||
Gracias por los comentarios.
De todas formas, estoy haciendo la app para que se vea óptima a partir de 4", creo que ya es un sector bastante pequeño los que tienen moviles Android con pantallas inferiores a esas pulgadas. Por cierto, he ido a coger un móvil para probar la app y tenía activado, en las opciones de accesibilidad, la opción de Texto Grande. Era un Xperia M4 (5"), y con esa opción activada el texto de la app también sufría el cambio y se veía todo muy descuadrado. Hay alguna manera de que esta opción de Texto Grande no se aplique a la app? Porque eso es ya algo que se me escapa, como ponga la letra aún más chica en modo normal, será ilegible jajajaja. Un saludo! |
#14
|
||||
|
||||
Gracias por los comentarios.
De todas formas, estoy haciendo la app para que se vea óptima a partir de 4", creo que ya es un sector bastante pequeño los que tienen moviles Android con pantallas inferiores a esas pulgadas. Por cierto, he ido a coger un móvil para probar la app y tenía activado, en las opciones de accesibilidad, la opción de Texto Grande. Era un Xperia M4 (5"), y con esa opción activada el texto de la app también sufría el cambio y se veía todo muy descuadrado. Hay alguna manera de que esta opción de Texto Grande no se aplique a la app? Porque eso es ya algo que se me escapa, como ponga la letra aún más chica en modo normal, será ilegible jajajaja. Un saludo! ![]() |
Gracias de parte de: | ||
![]() |
![]() |
||||||
|