Spanish Altura de Label y TextField

Ender1969

Member
Licensed User
Hola a todos.

Estoy creando un formulario de datos dinámicamente (no puedo hacerlo desde el diseñador) y tengo un problema para saber la altura real de los Label y los Textfield, aunque en height de la vista ponga un valor, veo que el que manda es el estilo de la fuente y su tamaño.

Una vez puesto el estilo y tamaño de una fuente. ¿Cómo puedo saber el mínimo de altura que ocupará un Label y un Textfield?. No es el tamaño de la letra, pues parece que hay como un padding entre la letra y el borde de la vista pero no se como calcularlo.

alturas.png


Me está volviendo loco poder fijar una altura para poder calcular líneas

¿Alguna idea que me pueda echar una mano?
 

Ender1969

Member
Licensed User

Eso no te sirve?
No, ya calculo el tamaño del texto así

B4X:
Dim TamanoAncho As Int     = MeasureTextWidth("W",FuenteEstilo)
Dim TamanoAlto As Int     = MeasureTextHeight("W",FuenteEstilo)

Y es correcto, dependiendo de la fuente usada, pero luego el espacio del borde del textfield y el label es lo que no llego a precisar pues hay como un espacio que no controlo. Aunque en la vista indique un alto, tiene un mínimo que no consigo ver.
 

josejad

Expert
Licensed User
Longtime User

TILogistic

Expert
Licensed User
Longtime User
prueba? el ancho y alto (add Padding)

B4X:
Private Sub MeasureTextWidth(Text As String, Font1 As B4XFont) As Int
#If B4A
    Private bmp As Bitmap
    bmp.InitializeMutable(2dip, 2dip)
    Private cvs As Canvas
    cvs.Initialize2(bmp)
    Return cvs.MeasureStringWidth(Text, Font1.ToNativeFont, Font1.Size)
#Else If B4i
    Return Text.MeasureWidth(Font1.ToNativeFont)
#Else If B4J
    Dim jo As JavaObject
    jo.InitializeNewInstance("javafx.scene.text.Text", Array(Text))
    jo.RunMethod("setFont",Array(Font1.ToNativeFont))
    jo.RunMethod("setLineSpacing",Array(0.0))
    jo.RunMethod("setWrappingWidth",Array(0.0))
    Dim Bounds As JavaObject = jo.RunMethod("getLayoutBounds",Null)
    Return Bounds.RunMethod("getWidth",Null)
#End If
End Sub

Private Sub MeasureTextHeight(Text As String, Font1 As B4XFont) As Int
#If B4A   
    Private bmp As Bitmap
    bmp.InitializeMutable(2dip, 2dip)
    Private cvs As Canvas
    cvs.Initialize2(bmp)
    Return cvs.MeasureStringHeight(Text, Font1.ToNativeFont, Font1.Size)
#Else If B4i
    Return Text.MeasureHeight(Font1.ToNativeFont)
#Else If B4J
    Dim jo As JavaObject
    jo.InitializeNewInstance("javafx.scene.text.Text", Array(Text))
    jo.RunMethod("setFont",Array(Font1.ToNativeFont))
    jo.RunMethod("setLineSpacing",Array(0.0))
    jo.RunMethod("setWrappingWidth",Array(0.0))
    Dim Bounds As JavaObject = jo.RunMethod("getLayoutBounds",Null)
    Return Bounds.RunMethod("getHeight",Null)
#End If
End Sub
 

TILogistic

Expert
Licensed User
Longtime User
padding:
ejemplo:
B4A:
B4X:
    Dim edt As EditText = B4XFloatTextField1.TextField
    edt.Padding = Array As Int (0dip, 0dip, 10dip, 0dip) 'Right margin 10dip
B4J
B4X:
CSSUtils.SetStyleProperty(TextArea1.As(TextArea),  "-fx-padding", "0 0 0 0")
buscar ejemplo:
 

Ender1969

Member
Licensed User
padding:
ejemplo:
B4A:
B4X:
    Dim edt As EditText = B4XFloatTextField1.TextField
    edt.Padding = Array As Int (0dip, 0dip, 10dip, 0dip) 'Right margin 10dip
B4J
B4X:
CSSUtils.SetStyleProperty(TextArea1.As(TextArea),  "-fx-padding", "0 0 0 0")
buscar ejemplo:
Con una primera prueba en B4J, parece que me puede servir (al menos en textfield, de hecho se han quitado los espacios, excepto el inferior, pero ya es algo. Veré si en todos los tamaños de fuentes sirve.

Gracias
 

Ender1969

Member
Licensed User
¿Por qué?

¿Has visto esta forma de crear formularios?
Gracias, lo veré para otro caso que tengo, pero en este creo que no.

El formulario se genera al vuelo, leyendo de una información que me llega en la propia BBDD que abro, para leer los campos.
 
Top