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 20/11/14, 09:56:23
Avatar de Guixe94
Guixe94 Guixe94 no está en línea
Desarrollador
Mensajes: 900
 
Fecha de registro: abr 2012
Localización: Barcelona, Catalunya
Mensajes: 900
Modelo de smartphone: HTC ONE y Galaxy Note 3
Versión de ROM: Ultima Orange Stock
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Problema con tamaños

Hola,

En mi app utilizo fragments. mi actividad principal esta compuesta por un relative layout arriba de 55dp de alto, en el cual muestro nombre de usuario, vidas, etc. Abajo tengo el layout de anuncios y lo demas es el container para los fragments (osea un framelayout de esos) el cual tiene de altura fill parent pero con margin top y botton de 55dp para que quepan los otros layouts (mirar imagen). Hasta aqui todo perfecto.



El problema es cuando un usuario compra el producto "quitar ads" dentro de la app el layout anuncio pasa a ser visibilidad GONE. Entonces lo que hago es poner el margin bottom del container a 0 con el siguiente codigo:

[PHP] RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)MyActivity.container. getLayoutParams();
params.setMargins(0, 130, 0, 0); //substitute parameters for left, top, right, bottom
MyActivity.container.setLayoutParams(params);

MyActivity.LLanuncio.setVisibility(View.GONE);[/PHP]


Si os fijais en el margin top le he puesto 130, aqui esta el problema, esas medidas me las coge en px y no en dp, por lo tanto no puedo ajustarlo para que se vea bien en todos los dispositivos.
Por ejemplo con 130 en un s3 se ve bien el layout de arriba, en un nexus 1 sobra mucho espacio por arriba y en mi note 3 se me queda corto y queda cortado..

Hay alguna forma de hacer lo mismo pero con dp?
Si no, alguien se le ocurre alguna otra forma de poder hacerlo?

Muchas gracias ;)!

Última edición por Guixe94 Día 21/11/14 a las 09:10:57
Responder Con Cita


  #2  
Viejo 20/11/14, 10:31:56
Avatar de Dexafree
Dexafree Dexafree no está en línea
Mr. FAQMan
Mensajes: 8,021
Compra y venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Versión de ROM: Android 4.1.1 Jelly Bean
Versión de Radio: KF1
Tu operador: Movistar
Mencionado: 65 comentarios
Tagged: 2 hilos
Sin entrar en el tema de que, si leo bien, tienes declarados container y LLanuncio como public (no demasiado buena práctica de programación), un par de cosas

1. No especificas qué ViewGroup tienes como vista raíz (dentro de qué están metidos esos 3 elementos)
Si pones un LinearLayout, se te puede simplificar, ya que no tendrás que poner el marginTop ni el Bottom para que "quepan los otros", directamente ya se ponen uno debajo del otro.
Además, como View.GONE hace que la View pase a tener un tamaño 0, en principio el FrameLayout podría ocupar todo el espacio vertical

2. La conversión de px a dp (y de paso te dejo la de dp a px)

Código:
public int dpToPx(int dp) {
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
    int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));       
    return px;
}

public int pxToDp(int px) {
    DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
    int dp = Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
    return dp;
}
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 20/11/14, 13:41:54
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
Se puede hacer también con un RelativeLayout, poniendo al Fragment Container con un layout_below el RelativeLayout superior y un layout_above el anuncio de abajo.

Cuando quites el anuncio el Fragment Container pasará a ocupar toda la altura, al no encontrar el elemento que está en layout_above.
Responder Con Cita
Gracias de parte de:
  #4  
Viejo 21/11/14, 04:50:16
Avatar de LEAJIM_454
LEAJIM_454 LEAJIM_454 no está en línea
Miembro del foro
Mensajes: 215
 
Fecha de registro: nov 2012
Mensajes: 215
Modelo de smartphone: Galaxy Ace
Versión de ROM: 2.3.6 Stock
Tu operador: Otra
Mencionado: 1 comentarios
Tagged: 0 hilos
Hola, yo lo que hago es poner todo en linear layout y usar pesos: layout_weight, digo esto por si te ayuda en algo, ya que dos grandes te respondieron antes KriogeN y Dexafree... XD
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 21/11/14, 09:10:36
Avatar de Guixe94
Guixe94 Guixe94 no está en línea
Desarrollador
Mensajes: 900
 
Fecha de registro: abr 2012
Localización: Barcelona, Catalunya
Mensajes: 900
Modelo de smartphone: HTC ONE y Galaxy Note 3
Versión de ROM: Ultima Orange Stock
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Hola,

Muchas gracias a todos, utilizaba un relative layout asi que puse el layout_above sobre el anuncio y al desaparecer ya se pone bien, como me habias comentado.

Saludos!
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: 00:34:51 (GMT +2)

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