Spanish [B4A Libreria] AutoDimension

Jannete

Member
Hola a todos. Soy algo nueva en esto de la programacion y en B4A, y gracias a este maravilloso programa y a este foro he logrado hacer mis "mini" aplicaciones para uso personal / pedagogico. No soy alguien que pretende poner aplicaciones en el Play Store, ya que no se me ocurriria como monetizarlas (ademas no tengo el privilegio de poder permitirme el pagar una cuenta, como maestra de colegio particular no se gana muy bien, y en mi voluntariado menos, si fuesen gratuitas me haria una y tal vez probaria el crear y subir aplicaciones), en fin, la biblioteca:

Tal vez no soy muy lista con esto de la programacion, asi que algo con lo que he batallado desde que inicie en B4A, ha sido en los benditos layouts y las variants. Me he repasado el tutorial en video de Erel, pero muchas veces sobrecargo mis aplicaciones y no me gusta como quedan usando los anclajes que tiene el designer, el editor que tiene este a veces es un suplicio (definir porcentajes control por control, batallar con el DIP, etc). Asi que me puse a jugar con los valores, y logre hacer un pequeño codigo que me permite crear mi diseño en el designer, y olvidarme de los ajustes (solo sigo batallando con el tamaño de los textos).

Tal fue el exito que obtuve con mi pequeño codigo, que lo empece a usar en todos mis proyectos, y me ha dado buenos resultados, por lo que me lance a hacer una biblioteca.

Su funcionamiento es simple:

1.- Abrir el designer.
2.- Agregar las vistas (sin cambiar la variant elegida y comentar el autoscale.
3.- Declararlo en Globals, inciarlo en Activity_Create y ejecutarlo en Activity Resume.

Listo!, las vistas se escalan en los dispositivos en la misma proporcion que se ve en el Designer sobre la variant por defecto.

Funciona asi:

B4X:
Sub Globals
    Dim autoscale As AutoDimension
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("main")
    autoscale.Initialize(Activity)      
End Sub

Sub Activity_Resume
    autoscale.ActivityRedimensionar  
End Sub

Sub Activity_Pause (UserClosed As Boolean)
   
End Sub

Aclaro: El codigo anterior solo afecta a las vistas dentro del avtivity, es decir, no afecta a las vistas mas pequeñas. Me explico, si hay un activity, dentro de el un panel, y dentro del panel un label, solo afecta el redimensionado al parent del activity, es decir, al panel, por lo que el label no se vera afectado. Para que el contenido del Panel tambien se redimensione (o sea, el label), despues de redimensionar el Activity se llama a autoscale.PanelRedimensionar, o si se esta usando un scrollview, se llamara a autoscale.ScrollViewRedimensionar.

Espero haberme explicado de forma clara.

AutoDimension
Version:
1

  • AutoDimension
    Metodos:
    • Initialize (NombreActivity As Activity)
  • Inicializa el Activity para redimensionar sus vistas. Inicializar en Activity Create. Lanzar en el Activity Resume.
  • InitializePanel (PanelNombre As Panel, Ancho As Int, Alto As Int)
  • Inicializa el Panel para redimensionar sus vistas. El Ancho y el Alto deben de ser los mismos que los dados en el Designer.
  • InitializePanel2 (PanelNombre As Panel, Ancho As Int, Alto As Int)
  • Inicializa el Panel para redimensionar sus vistas. El Ancho y el Alto deben de ser los mismos que los dados en el Designer.
  • InitializeScroll (ScrollViewNombre As ScrollView, PanelScrollView As Panel, AnchoPanel As Int, AltoPanel As Int)
  • Inicializa el Scroll View y el Panel que ira dentro de el para ajustarlo y redimensionar sus vistas.

Eventos:


  • ActivityRedimensionar
  • Redimensiona automaticamente todas las vistas del Activity. No aplica a vistas dentro de un Panel o un ScrollView.
  • PanelRedimensionar
Redimensiona las Vistas Dentro de un Panel.

  • Panel2Redimensionar
Redimensionar Vistas Dentro de un Panel (Segunda Funcion para trabajar dos paneles a la vez

  • ScrollViewRedimensionar
  • Redimensionar el Panel que ira dentro de un ScrollView y las vistas correspondientes dentro de el.

Notas:

-Diseñar con el Variant que abre por defecto al abrir el designer.

-Comentar el autoscale en el código del designer.

-No cambiar los anclajes que van por defecto.

-En InitializePanel se debe de poner el tamaño del panel dado en el designer (este se escalara proporcionalmente a la pantalla que se use).

-Dado por sentado que para un ScrollView se usara un Layout hecho de un Panel que contendrá en su interior los controles, en InitializeScroll, se debe de poner el tamaño dado en el designer del panel de ese Layout a cargar.


Proximas actualizaciones (si nada me lo impide y logro encontrar las soluciones):

-Cambio automatico del tamaño del Texto (por lo pronto se puede usar un AutoSize Label para algunas cosas basicas).

Tal vez es una cosilla de nada, pero cuando empece hubiese deseado tener algo asi (y a la vez lo utilizo siempre en mis proyectos).

Espero ayude a alguien con esta pequeña libreria, y si puedo ayudar agegandole cosas, con confianza haganmelo saber.

Saludos!
 

Attachments

  • AutoDimension.zip
    4.5 KB · Views: 430
Last edited:

josejad

Expert
Licensed User
Longtime User
Hola Jeannete, gracias por compartir.

Que alguien me corrija si me equivoco, pero para subir apps al Play Store de Google creo que la cuenta es gratuita. Para iOS sí hay que tener cuenta de desarrolador.

saludos,
 

AnandGupta

Expert
Licensed User
Longtime User
No, not free, but one time charge at GPlay.
Jannete, thanks for your contribution to the Forum ?
---
No, no es gratis, pero solo una vez en GPlay.
Jannete, gracias por tu contribución al Foro ?

Regards,

Anand
 

Jannete

Member
@José J. Aguilar , efectivamente, @AnandGupta tiene razon, la cuenta se paga por unica ocasion (a diferencia de la AppStore) y cuesta 25 dolares, pero la situacion actual con el virus que no permite tener entradas extra (a veces hago mesas de dulces para fiestas de niños), mas mi sueldo como maestra (que de por si no me alcanzaria, pero ademas me estan recortando demasiado ya que las escuelas estan cerradas), no me permiten pagarme una cuenta.

Gracias a ustedes por comentar y por hacer posible esta comunidad, que aunque no soy programadora, he apendido mucho leyendo el foro y a veces preguntando cosas.
 

AnandGupta

Expert
Licensed User
Longtime User
These are testing time for you, me and all. We all must stay strong and have faith. Almighty will smile on us soon.

Estos son tiempos de prueba para ti, para mí y para todos. Todos debemos mantenernos fuertes y tener fe. Todopoderoso nos sonreirá pronto.

Regards,

Anand
 
Top