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 15/06/14, 16:50:22
Array

[xs_avatar]
Bongiovi Bongiovi no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Localización: España
Mensajes: 186
Modelo de smartphone: Motorola Moto G , BQ Maxwell 2 Lite
Tu operador: Simyo
Problema al asignar dimensiones a botones en Java

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:

Código:
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().addOnGlobalLayoutListener
        ( 
            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().removeGlobalOnLayoutListener(this);
                    layout_view.setVisibility(View.GONE);
                    //Asignamos 1/3 del alto de la pantalla a cada botón
                    btn_binarios.getLayoutParams().height=height_screen/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_screen/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...

Última edición por Bongiovi Día 19/06/14 a las 20:04:11.
Responder Con Cita


  #2  
Viejo 15/06/14, 17:14:24
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
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.
Responder Con Cita
  #3  
Viejo 15/06/14, 20:11:05
Array

[xs_avatar]
Bongiovi Bongiovi no está en línea
Miembro del foro
 
Fecha de registro: oct 2012
Localización: España
Mensajes: 186
Modelo de smartphone: Motorola Moto G , BQ Maxwell 2 Lite
Tu operador: Simyo
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
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 ;)
Responder Con Cita
Respuesta

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



Hora actual: 21:36:55 (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 / 邮件联系 /