![]() |
|
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 |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
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 |
|
#2
|
||||
|
||||
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; } |
Gracias de parte de: | ||
#3
|
||||
|
||||
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. |
Gracias de parte de: | ||
#4
|
||||
|
||||
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
|
Gracias de parte de: | ||
#5
|
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! |
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 00:34:51 (GMT +2)
HTCMania: líderes desde el 2007