Sergio,
Yo hice eso hace un tiempo (fue harto mas complejo para B4I eso si).
Basicamente al iniciar el
B4XMainPage, llamo a una sub
testFont
Esta agrega un label y va probando un string, que yo se que es el que quiero como base para el ancho de la pantalla del usuario. Una vez que encuentra ese valor, define esta variable como
Escala Basal.
Luego, en un modulo de codigo, tengo declarados los tamaños, en este caso 7, los cuales utilizo a través de toda la App, basado en escalar el tamaño basal.
Dim lblTest As Label
lblTest.Initialize("")
Root.AddView(lblTest, 0,xc.width(20),GetDeviceLayoutValues.Width, 50dip)
Dim baseScale As Float=0
Dim size As Float=15
Do While baseScale=0
'cs.Initialize()size(size).Typeface(xc.fontNormal).Color(Colors.Black).Append("BlueToothBlueToothBlueToothBlueTooth").PopAll
b4xv=lblTest
b4xv.Font=xc.b4xFontNormal(size)
lblTest.Text="BlueToothBlueToothBlueToothBlueTooth"
cv.Initialize(lblTest)
Dim b4xr As B4XRect
b4xr=cv.MeasureText("BlueToothBlueToothBlueToothBlueTooth", xc.b4xFontNormal(size))
If b4xr.Width>GetDeviceLayoutValues.Width Then
baseScale=size-0.2
End If
size=size+0.2
Loop
xc.removeView(lblTest)
xc.titleSize=baseScale
xc.subTitleSize=baseScale*0.8
xc.bigSize=baseScale*1.5
xc.superBigSize=baseScale*2
xc.smallSize=baseScale*0.6
xc.badgeSize=baseScale*0.5
Para normalizar y optimizar el uso de distintas variantes de las fuentes, tengo varias subs en el modulo de codigo que me permiten generar las variantes y tambien los tamaños obtenidos anteriormente, tanto para B4I como B4A:
Dim B4XFuente as B4XFont=xc.b4xFontNormal(xc.titleSize) 'Compatible con B4I/A
Sub b4xFontNormal(size As Float) As B4XFont
#if b4A
Return XUI.CreateFont(Typeface.LoadFromAssets("SF-UI-Display-Normal.ttf"),size)
#end if
#if b4i
Return XUI.CreateFont(fontNormal(size),size)
#End If
End Sub