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  
Viejo 26/03/13, 18:12:51
Avatar de ephramdoyle
ephramdoyle ephramdoyle no está en línea
Miembro del foro
Mensajes: 61
 
Fecha de registro: abr 2010
Mensajes: 61
Modelo de smartphone: Samsung I5700
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de ephramdoyle
ephramdoyle ephramdoyle no está en línea
Miembro del foro
Mensajes: 61
 
Fecha de registro: abr 2010
Mensajes: 61
Modelo de smartphone: Samsung I5700
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
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
Avatar de ephramdoyle
ephramdoyle ephramdoyle no está en línea
Miembro del foro
Mensajes: 61
 
Fecha de registro: abr 2010
Mensajes: 61
Modelo de smartphone: Samsung I5700
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de neowendigo
neowendigo neowendigo no está en línea
Miembro del foro
Mensajes: 454
Compra y 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
Mencionado: 4 comentarios
Tagged: 0 hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 11:26:53 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007