German Labelgröße ?

Wolli013

Well-Known Member
Licensed User
Longtime User
Wieviel größer muss ein Label für ein Text sein?

Wenn ich ein Label erstelle von 24 und ein Text auch von 24 reinschreibe passt er nicht rein und wird abgeschnitten. Mache ich das Label größer, z.B. auf 40 dann passt der 24er Text ohne Probleme.

Gibt es da eine Richtlinie?
Warum passt ein 24er Text nicht in ein 24er Label?
 

klaus

Expert
Licensed User
Longtime User
Die TextGrössenwerte und Labelhöhenwerte haben nichts miteinader zu tun.
Sind die 24 und 40 für die Labelhöhe dip Werte (24dip und 40dip)?
Du kannst die Texthöhe mit
MeasureMultilineTextHeight (TextView As android.widget.TextView, Text As CharSequence) As Int
aus der StringUtils Library rechnen.
Dann musst Du auch noch das Padding mit in Betracht ziehen. Padding sind Ränder ausserhalb des Textes.
Schau mal HIER rein.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Wie ist es denn Möglich einen Text ohne Padding (oben und unten) in einen Label anzuzeigen?
Ich finde immer nur die Möglichkeit von Top, Center oder Bottom.

Beispiel:
lblText.Gravity = Gravity.LEFT + Gravity.CENTER_VERTICAL
 

klaus

Expert
Licensed User
Longtime User
Das Padding kannst Du im Designer ändern:

upload_2017-7-2_12-39-26.png


CKicke auf default und ändere Werte
upload_2017-7-2_12-41-17.png
.

Oder per Code, siehe HIER.

Das isr etwas anders, lblText.Gravity = Gravity.LEFT + Gravity.CENTER_VERTICAL
es gibt an wo der Text angezeigt werden soll.

Erklärung für Padding.
 
Last edited:

pucki

Active Member
Licensed User
hi Klaus.

Hab gerade dein Link zum Padding gelesen. Gibt es da noch mehr so interessante Infos in DEUTSCH. ?

Wenn ja, hast du da ein Link(Sammlung). Würde mir bei einigen Sachen sicher helfen.

Gruß

Pucki
 

Wolli013

Well-Known Member
Licensed User
Longtime User
So wie es aussieht scheint es aber nicht möglich zu sein einen Text ohne abstand nach oben und unten in ein Label zu bekommen.
Dadurch ist es dann nicht möglich den Text bis zur Oberkante des Bildschirmes zu bekommen oder sehe ich das falsch?
Das Label muss ja immer größer als der Text sein, ansonsten wird er Text nicht mehr ganz dargestellt.
 

pucki

Active Member
Licensed User
@Wolli013

Doch ist es. ;)

Benutze mal meine Code.

B4X:
#Region  Project Attributes
   '#ApplicationLabel: B4A Example
   #VersionCode: 1
   #VersionName:
   'SupportedOrientations possible values: unspecified, landscape or portrait.
   #SupportedOrientations: unspecified
   #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
   #FullScreen: true
   ' <- setzt auf vollbild und entfernt die Android Symbole

   #IncludeTitle: false
   ' <-  Enfernt das BA-Balken (weiß ich auch erst seit ich gefragt habe)
#End Region

Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
End Sub

Sub Globals
   Private Label1 As Label  '<-  vom Designer erstellt (hat nur label1)

End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   Dim su As StringUtils
   Activity.LoadLayout("test_2.bal")  '<- Der Name es Designs

   ' Setzt das Label in die oberste Ecke
   Label1.Top = 0
   Label1.Left = 0
   Label1.Text = "Das ist ein Test"
   Label1.Height = su.MeasureMultilineTextHeight(Label1, Label1.Text)  ' setzt die Höhe des Label1 auf die Texthöhe

End Sub

Im Designer klickst du auf das Label. Unter Text-Style . Darunter findest du Horizont Alignment (auf LEFT Setzen) + und Vertical Alignment (auf TOP Setzen).
Leider weiß ich nicht wie man diese beiden Dinge via Code setzen kann. Ist aber bei mein "Coden" egal da ich das eh im Design-Mode einstelle.

Grundsätzlich ist aber das Problem bei Text das die Textbreite sich mit den Buchstaben ändert. Bei True-Type Schriften muss man deshalb die Größe vorher festlegen. Notfalls zu Übung mit den X füllen. (Ist das größte Zeichen im Text). VB selbst macht das in den es die Label auf autosize = true setzt.

Ich habe den Code gerade im Emlulatur getestet und der Text hockt perfekt in der obersten Ecke.

Ich hoffe dein Problem richtig verstanden zu haben, und dir so geholfen zu haben.

Kleiner Tipp noch :
Wenn du im Designer Drawable auf GradientDrawable und Corner Radius auf 1 stellst wird der Rand noch kleiner.
Du kannst auch noch mehr tricken. Einfach in meine Code label1.top = -2 setzen (negativ) dann fällt das Label aus den Bild sogar ;)

Gruß

Pucki
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Darunter findest du Horizont Alignment (auf LEFT Setzen) + und Vertical Alignment (auf TOP Setzen).
Leider weiß ich nicht wie man diese beiden Dinge via Code setzen kann.
Mit lblText.Gravity = Bit.Or(Gravity.LEFT, Gravity.TOP)

Auch mit Gravity.Top bleibt ein kleiner Rand oben.
Wenn Du den Text ganz an den Rand bringen willst kannst Du für das Padding minus Werte verwenden.
 
Last edited:
Top