Spanish Matriz de Botones vs Botones en tiempo de ejecuciòn

desof

Well-Known Member
Licensed User
Longtime User
Hola expertos, esto mas que una consulta es un pedido de sugerencia ya que tengo que desarrollar un juego que lleva 75 botones y mi primer duda a la hora de planificarlo es si me conviene desde el punto de vista de ahorro de memoria y recursos es crearlo en tiempo de diseño o de ejecuciòn. Teniendo en cuenta que debo tener total control sobre cada botòn para recibir eventos y modificar propiedades sobre estos.
Gracias por estar ahi!
 

Descartex

Well-Known Member
Licensed User
Longtime User
Muy buenas.
Bajo mi opinión, el consumo de memoria y recursos sería el mismo, ya que los botones habrian de cargarse en memoria en algun momento. El unico aumento sería en el tamaño del APK, pero sería minimo, porque los layouts ocupan muy poco.
En cuanto a los eventos y las propiedades, no habría problema, puesto que con la propiedad Tag y el objeto Sender lo tendrías hecho, aunque los creases en tiempo de ejecución.
Un saludo.
 

desof

Well-Known Member
Licensed User
Longtime User
Muy buenas.
Bajo mi opinión, el consumo de memoria y recursos sería el mismo, ya que los botones habrian de cargarse en memoria en algun momento. El unico aumento sería en el tamaño del APK, pero sería minimo, porque los layouts ocupan muy poco.
En cuanto a los eventos y las propiedades, no habría problema, puesto que con la propiedad Tag y el objeto Sender lo tendrías hecho, aunque los creases en tiempo de ejecución.
Un saludo.

Muy bien! y respecto a la posibilidad de manejar todas las propiedades como Drawable un color diferente para el estado habilitado/desabilitado y colores distintos es todo maneable en tiempo de ejecución ?
 

Descartex

Well-Known Member
Licensed User
Longtime User
Muy bien! y respecto a la posibilidad de manejar todas las propiedades como Drawable un color diferente para el estado habilitado/desabilitado y colores distintos es todo maneable en tiempo de ejecución ?
Si, todas sus propiedades son modificables en tiempo de ejecución, independientemente de que estos se hayan creado en tiempo de ejecución o no.
Un saludo.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Como bien dice Descartex el consumo de memoria y recursos es el mismo, yo personalmente lo prefiero hacer en tiempo de ejecución por una cuestion de rapidez. Creo una variable global que se llame TotalBotones y le asigno el valor, si tengo que aumentar o disminuir un boton no tengo que ir al Designer y ponerlo o quitarlo, simplemente modifico ese valor de TotalBotones . Por otra parte si todos los botones no van a aparecer en la pantalla, puedes poner solo los que se vean y estas dandole mas rapidez al proceso.

Por otro lado si quieres modificar propiedades de los botones, es tan facil como crear un List y una vez que has creado el boton lo asignas al List, en el tag pones el indice del boton, luego en el evento o donde te interese cambias las caracteristicas.
Tambien puedes crear una matriz de botones, y simplemente refiriendote al indice podras modificar caracteristicas. La forma de hacerlo es la que mas te guste, lo unico a tener en cuenta es que si empleas una matriz de botones dimensionala al valor adecuado, si estas poniendo de mas ocuparas mas memoria, aunque será casi despreciable.

B4X:
' ----------------------------------------------------------
' crear los botones

           ListaBoton.Initialize

            For n = 1 To TotalBotonesMenu
                Dim EM As Button
                EM.Initialize("NombreEventoDelBoton")
                EM.TextColor =Colors.White
                EM.TextSize = TamañoTexto
                EM.Text = Texto(n)
                EM.Tag = n
                ListaBoton.Add(EM)
            Next

' ----------------------------------------------------------
' Detectar click del boton
Sub NombreEventoDelBoton_Click

   Dim b As Button
   b = Sender
   IndiceBotonPulsado= b.Tag
   
  ' Llamas a lo que quieras hacer, con el indice y el list de la ListaBoton lo sabes todo

End Sub
' ----------------------------------------------------------


' Modificar caracteristicas
   Dim L As Button
    L.Initialize("")
    L=ListaBoton.Get(IndiceQueQuierasCambiar)
    L.Text="Nuevo Texto"
' ----------------------------------------------------------

Saludos
 

desof

Well-Known Member
Licensed User
Longtime User
Entiendo!!

El tema es que se complica con el código un poco para armar una grilla dentro de un Panel y estuve tratando de ver de crear los colores Gradient en tiempo de diseño y no veo como hacerlo por que no aparecen esas propiedades.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Desof

No se si te refieres a hacer esto (basado en el ejemplo que puse):

B4X:
   Dim Gradient1 As GradientDrawable
   Dim Clrs(2) As Int
   Clrs(0) = Colors.Red
   Clrs(1) = Colors.White
   Gradient1.Initialize("TL_BR",Clrs)  ' aqui pones de donde a donde quieres hacer el gradiente
   Gradient1.CornerRadius = 15dip ' si pones esto puedes redondear las esquinas de los botones ;)



                Dim EM As Button
                EM.Initialize("NombreEventoDelBoton")
                EM.TextColor =Colors.White
                EM.TextSize = TamañoTexto
                EM.Text = Texto(n)
                EM.Tag = n
                EM.Background = Gradient1  ' aqui le pones el gradiente

Saludos
 

desof

Well-Known Member
Licensed User
Longtime User
Hola Desof

No se si te refieres a hacer esto (basado en el ejemplo que puse):

B4X:
   Dim Gradient1 As GradientDrawable
   Dim Clrs(2) As Int
   Clrs(0) = Colors.Red
   Clrs(1) = Colors.White
   Gradient1.Initialize("TL_BR",Clrs)  ' aqui pones de donde a donde quieres hacer el gradiente
   Gradient1.CornerRadius = 15dip ' si pones esto puedes redondear las esquinas de los botones ;)



                Dim EM As Button
                EM.Initialize("NombreEventoDelBoton")
                EM.TextColor =Colors.White
                EM.TextSize = TamañoTexto
                EM.Text = Texto(n)
                EM.Tag = n
                EM.Background = Gradient1  ' aqui le pones el gradiente

Saludos
Guau!
creo q es exactamente lo que necesito.
soy muy extructurado y buscaba las propiedades en el propio botón y no me percate que era de esta manera.

mil gracias amigo!!
 
Top