German Schriftgröße in Label anpassen

so27

Active Member
Licensed User
Hallo zusammen,

ich habe folgendes Problem. Ich habe ein Label, welches den gesamten Bildschirm einnimmt. In diesem Label erscheint immer ein Wort. Die Länge des Wortes ist immer unterschiedlich. Der Bildschirm ist im Querformat.

Nun sollte sich die Schriftgröße immer automatisch so anpassen, dass die maximale Größe für das Wort verwendet wird.

D. h., wenn das Wort beispielsweise nur 5 Zeichen beinhaltet, kann es deutlich größer dargestellt werden, als ein Wort mit 15 Zeichen.

Weiß jemand, wie ich das realisieren kann?
 

klaus

Expert
Licensed User
Mit dieser Routine:
B4X:
Sub SetTextSize(lbl As Label, txt As String)
    Private cvs As Canvas
    Private bmp As Bitmap

    Private dt As Float
    Private limit = 0.5 As Float
    Private h, w As Int

    bmp.InitializeMutable(2dip, 2dip)
    cvs.Initialize2(bmp)
    lbl.Text = txt
    lbl.TextSize = 300
    dt = lbl.TextSize
    h = stu.MeasureMultilineTextHeight(lbl, txt)
'    h = cvs.MeasureStringHeight(txt, lbl.Typeface, lbl.TextSize) 'gibt falsche Werte
    w = cvs.MeasureStringWidth(txt, lbl.Typeface, lbl.TextSize)
    Do While dt > limit Or h > lbl.Height Or w > lbl.Width
        dt = dt / 2
'        h = cvs.MeasureStringHeight(txt, lbl.Typeface, lbl.TextSize)
        h = stu.MeasureMultilineTextHeight(lbl, txt)
        w = cvs.MeasureStringWidth(txt, lbl.Typeface, lbl.TextSize)
        Log(h & " / " & w & " / " & lbl.TextSize)
        
        If h > lbl.Height Or w > lbl.Width Then
            lbl.TextSize = lbl.TextSize - dt
        Else
            lbl.TextSize = lbl.TextSize + dt
        End If
    Loop
    
End Sub
Beiliegend mein TestProgamm, benötigt die StringUtils library.
 

Attachments

Top