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

Respuesta
 
Herramientas
  #1  
Viejo 26/03/13, 18:12:51
Array

[xs_avatar]
ephramdoyle ephramdoyle no está en línea
Miembro del foro
 
Fecha de registro: abr 2010
Mensajes: 61
Modelo de smartphone: Samsung I5700

rom Problema diseñar layout para diferentes tamaños (caso Galaxy S2 Y S3

Hola,

Llevo varios días leyendo muchos foros, blogs, la documentación oficial pero no consigo saber como hacerlo bien...

Yo hago los diseños en Photoshop con la resolución 800x480 ya que utilizo de base y de emulador principal mi Galaxy S2 (hdpi).
En los xml trabajo con RelativeLayout, valores dp (en lugar de pixels) y realizo las conversiones a Alta densidad (240) hdpi. Conversor online de px a dp.

Hasta ahora me ha ido bien trabajar así, pero ahora estoy intentando realizar una aplicación en horizontal (landscape) y tengo problemas.

Realizo el mismo proceso de siempre y en el S2 consigo que se vea como quiero, pero resulta que en un S3 se ve desproporcionado y movido (captura 2).

Entonces para adaptarlo he creado el directorio de "layout-xhdpi" y he convertido las imágenes de drawable a su tamaño respectivo para "drawable-xhdpi" con la herramienta Simple Nine-patch Generator. Y los valores de ancho y altura los convierto de nuevo a dp pero esta vez a Muy Alta densidad (320) xhdpi.

Pero sigue quedando mal. ¿Alguna idea?
Imágenes Adjuntas
Tipo de Archivo: png s2.png (26.6 KB, 52 visitas)
Tipo de Archivo: png s3.png (29.0 KB, 50 visitas)
Responder Con Cita


  #2  
Viejo 26/03/13, 18:24:18
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
He tenido un problema similar hace poco para el proyecto en el que estoy trabajando:

1) Quita el android:scaleType="fitXY"

2) Usa en su lugar android:adjustViewBounds="true"

Si aún así sigue sin funcionar bien, añade la siguiente clase a tu proyecto y úsala en el Layout en lugar del ImageView:

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class FullWidthImageView extends ImageView {

public FullWidthImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
Drawable d = getDrawable();

if(d!=null){
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());
setMeasuredDimension(width, height);
}else{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

}
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 26/03/13, 20:45:03
Array

[xs_avatar]
ephramdoyle ephramdoyle no está en línea
Miembro del foro
 
Fecha de registro: abr 2010
Mensajes: 61
Modelo de smartphone: Samsung I5700

Muchas gracias por responder kriogeN.

1) He probado de quitar en ambos layouts el android:scaleType="fitXY" y reemplazarlo por android:adjustViewBounds="true".

En el caso de layout-hdpi (GS2) deja de verse bien a verse con espacios en los laterales.
En el caso del layout-xhdpi (GS3) sigue viéndose igual, con la separación..


2) He implementado la clase y reemplazado el ImageView de /layout-xhdpi/acceso.xml por:
<mi.proyecto.FullWidthImageView
android:id="@+id/iv_bg_login_top"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:adjustViewBounds="true"
android:src="@drawable/bg_login_top" />
Y ahora pasa a ocupar todo el ancho. Gracias!

Por curiosidad he probado de aplicar lo mismo en hdpi/acceso.xml (la vista que ya funcionaba bien sin hacer cosas extras) y entonces la imagen pasa a ser algo más alta y los botones quedan inferiores quedan pegados.
De todas formas no aplico este sistema a ese layout y solucionado.

Pero sigo teniendo una duda. Aplicando la clase que me has aconsejado he podido corregir la imagen superior. Pero el resto de objetos, en este caso los botones siguen quedando desproporcionados.

No se si es la solución pero he intentado crear una nueva clase basada en la personalizda de ImageView por Button:
public class FullWidthButtonView extends Button {

public FullWidthButtonView(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Drawable d = getBackground();

if (d != null) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = (int) Math.ceil((float) width
* (float) d.getIntrinsicHeight()
/ (float) d.getIntrinsicWidth());
setMeasuredDimension(width, height);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
Esto no peta pero el botón pasa a ocupar todo muy deforme...

¿Cómo tratas al resto de objetos?
Responder Con Cita
  #4  
Viejo 26/03/13, 21:29:16
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
No suelo tener problemas con los Layout trabajando con DP y RelativeLayout. No se porque hay tanta gente en el foro que tiene problemas con esto. Y las pruebas las hago con MDPI y HDPI (Galaxy Ace de la empresa y mi LG Optimus 3D personal).

La clase del ImageView la tuve que hacer porque quería un ImageView que me ocupase todo el ancho pero sin deformarme el alto, hasta ahora con botones no he tenido problemas.
Responder Con Cita
  #5  
Viejo 27/03/13, 14:12:56
Array

[xs_avatar]
ephramdoyle ephramdoyle no está en línea
Miembro del foro
 
Fecha de registro: abr 2010
Mensajes: 61
Modelo de smartphone: Samsung I5700

En este otro sitio tratan un tema bastante parecido: https://groups.google.com/forum/#!to...up/r_q37ZsgBxI

Seguiré probando, cuando encuentre la solución la publicaré.
Responder Con Cita
  #6  
Viejo 27/03/13, 15:15:08
Array

[xs_avatar]
neowendigo neowendigo no está en línea
Miembro del foro
· Votos compra/venta: (2)
 
Fecha de registro: jul 2009
Localización: Madrid
Mensajes: 454
Modelo de smartphone: Nexus 5 y 10, Galaxy Nexus, Nexus One y HTC Magic
Tu operador: Pepephone
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
No suelo tener problemas con los Layout trabajando con DP y RelativeLayout. No se porque hay tanta gente en el foro que tiene problemas con esto. Y las pruebas las hago con MDPI y HDPI (Galaxy Ace de la empresa y mi LG Optimus 3D personal).

La clase del ImageView la tuve que hacer porque quería un ImageView que me ocupase todo el ancho pero sin deformarme el alto, hasta ahora con botones no he tenido problemas.
El problema es cuando se quiere una ubicación pixel-perfect. Tienes una imagen que ocupa todo el fondo y quieres ubicar un objecto en una posición concreta y exacta. Ahí es cuando el sistema de layouts de Android se viene abajo y hay que andar haciendo artesanía. No sabes cuánto del fondo vas a perder dependiendo de la resolución/tamaño del tablet (dpi). Ya que además, cada API level tiene un espacio útil diferente para la UI.

Evidentemente para una UI normal y corriente un RelativeLayout funciona a las mil maravillas.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 13:48:11 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /