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!
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 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 ?
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.
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"
' ----------------------------------------------------------
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.
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
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