Acceder

Ver la Versión Completa : [ SOLUCIONADO ] Problema al asignar dimensiones a botones en Java


Bongiovi
15/06/14, 16:50:22
Buenas, intento asignar desde Java dimensiones a 3 botones. Lo hago desde Java puesto que quiero que ocupen 1/3 de ventana cada uno. Tengo pensado hacer esto mismo para diseñar un TableLayout con múltiples celdas y subceldas (no conozco otra manera de hacerlo).

El código que sigo para asignar el ancho y el alto a los botones es el siguiente:

public class myActivity extends ActionBarActivity
{
( ... Declaración de variables ... )

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.ejercicios_activity);
context = this;
( ... asignación de layouts a los botones ... )

layout_view = findViewById(R.id.ejercicios_layout);
layout_view.getViewTreeObserver().addOnGlobalLayou tListener
(
new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
// gets called after layout has been done but before display
// so we can get the height then hide the view
width_screen = layout_view.getWidth();
height_screen = layout_view.getHeight(); // Ahaha! Gotcha
layout_view.getViewTreeObserver().removeGlobalOnLa youtListener(this);
layout_view.setVisibility(View.GONE);
//Asignamos 1/3 del alto de la pantalla a cada botón
btn_binarios.getLayoutParams().height=height_scree n/3;
btn_binarios.getLayoutParams().width=width_screen;
btn_sales.getLayoutParams().height=height_screen/3;
btn_sales.getLayoutParams().width=width_screen;
btn_oxoacidos.getLayoutParams().height=height_scre en/3;
btn_oxoacidos.getLayoutParams().width=width_screen ;
Toast.makeText(context, width_screen+", "+height_screen, Toast.LENGTH_SHORT).show();
}
});
}
El caso es que el Toast muestra correctamente las dimensiones de la ventana, pero los botones no se dibujan. Me imagino que porque tienen dimensiones nulas.

¿Por qué no funciona?

Un saludo!

EDITO

He detectado el error, la línea que resalto en el código sobraba. Esto me pasa por hacer copy-paste de código de internet a ciegas...

kriogeN
15/06/14, 17:14:24
Para que 3 botones ocupen 1/3 de pantalla cada uno no hace falta hacerlo por código, de hecho hacerlo por código es una marranada, porque si luego quieres introducir un nuevo control tienes que volver a modificar el código y hacer nuevos cálculos.

Tienes que crear un LinearLayout, en este caso Vertical porque los botones se sitúan verticalmente, y dentro pones los 3 botones con Width Match_Parent y Height 0dp, y además les añades a los 3 botones un Weight = 1

Con eso tendrás el mismo efecto, y si luego quieres añadir un 4º, un 5º o un 6º botón sólo tienes que añadirlo a tu LinearLayout y ponerlo también con Height 0dp y Weight = 1.

Bongiovi
15/06/14, 20:11:05
Para que 3 botones ocupen 1/3 de pantalla cada uno no hace falta hacerlo por código, de hecho hacerlo por código es una marranada, porque si luego quieres introducir un nuevo control tienes que volver a modificar el código y hacer nuevos cálculos.

Tienes que crear un LinearLayout, en este caso Vertical porque los botones se sitúan verticalmente, y dentro pones los 3 botones con Width Match_Parent y Height 0dp, y además les añades a los 3 botones un Weight = 1

Con eso tendrás el mismo efecto, y si luego quieres añadir un 4º, un 5º o un 6º botón sólo tienes que añadirlo a tu LinearLayout y ponerlo también con Height 0dp y Weight = 1.

Pues sí, mucho mejor. Y en vez de usar una combinación de TableLayout y LinearLayout voy a anidar LineaarLayouts verticales y horizontales: todo más sencillo y desde XML.

Gracias y un saludo ;)