Sub Process_Globals
Dim su As StringUtils
Dim Index As Int
Dim ht = 0 As Int
Dim RaenderX, RaenderY As Int
Dim Spalte = 2dip As Int ' Spalte zwischen den Labels
Dim TotalHeight = Spalte As Int
End Sub
Sub Globals
Dim ScrollView1 As ScrollView
Dim Canvas1 As Canvas
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("1")
Canvas1.Initialize(Activity)
' Dieses Label wird nur erstellt um die Reander zu messen
Dim lbl As Label
lbl.Initialize("")
Activity.AddView(lbl, 110%x, 0, 100dip, 50dip) ' Stelle ausserhalb des Bildschirms
SetNinePatchDrawable(lbl, "karsidangelen")
RaenderX = GetReanderX(lbl)
RaenderY = GetReanderY(lbl)
lbl.RemoveView ' hier wird es wieder gelöscht
AddRow("Links", "Kurzer Text")
AddRow("Links", "Langer Text mit Zeilenumbruch mal schauen wie das aussieht" & CRLF & "und hier ist die Zeilenumbruch")
AddRow("Links", "Die Sprechblasen sollten aber auch etwas luft zwischen den einzelnen Zeilen haben")
AddRow("Rechts", "Langer Text ohne Zeilenumbruch um Text mal schauen wie das dargestellt wird. Werden auch Smilies dargestellt?")
AddRow("Rechts", "Kurzer Text")
AddRow("Rechts", "Und ich muss sorgar rechtsbündig darstehen :-)")
ScrollView1.Panel.Height = 100%y 'TotalHeight
End Sub
Sub AddRow(Wo As String, txt As String)
Dim lbl As Label
Dim Breite As Float
lbl.Initialize("Label")
Breite = Canvas1.MeasureStringWidth(txt, Typeface.DEFAULT, 14) + RaenderX
Select Wo
Case "Links"
Breite = Min(Breite, 0.8 * ScrollView1.Width) ' Du kannst hier mit x * ScrollView1.Widthdie die maximale Breite bestimmen
ScrollView1.Panel.AddView(lbl, 0, TotalHeight, Breite, 0)
SetNinePatchDrawable(lbl, "karsidangelen")
lbl.Gravity = Gravity.LEFT ' nur zum schauen was möglich ist
Case "Rechts"
Breite = Min(Breite, 0.6 * ScrollView1.Width) ' Du kannst hier mit x * ScrollView1.Widthdie die maximale Breite bestimmen
ScrollView1.Panel.AddView(lbl, ScrollView1.Width - Breite, TotalHeight, Breite, 0)
SetNinePatchDrawable(lbl, "bendengelen")
lbl.Gravity = Gravity.Right
End Select
lbl.Tag = Index
lbl.TextColor = Colors.Black
lbl.Text = txt
ht = su.MeasureMultilineTextHeight(lbl, txt) + RaenderY
lbl.Height = ht
TotalHeight = TotalHeight + ht + Spalte
Index = Index + 1
ScrollView1.Panel.Height = TotalHeight
DoEvents
End Sub
Sub Label_Click
Dim lbl As Label
lbl = Sender
ToastMessageShow("Label " & lbl.Tag & " clicked", False)
End Sub
Sub SetNinePatchDrawable(Control As View, ImageName As String)
Dim r As Reflector
Dim package As String
Dim id As Int
package = r.GetStaticField("anywheresoftware.b4a.BA", "packageName")
id = r.GetStaticField(package & ".R$drawable", ImageName)
r.Target = r.GetContext
r.Target = r.RunMethod("getResources")
Control.Background = r.RunMethod2("getDrawable", id, "java.lang.int")
End Sub
Sub GetReanderX(v As View) As Int
Dim refl As Reflector
refl.Target = v
Return (refl.RunMethod("getPaddingLeft") + refl.RunMethod("getPaddingRight"))
End Sub
Sub GetReanderY(v As View) As Int
Dim refl As Reflector
refl.Target = v
Return (refl.RunMethod("getPaddingTop") + refl.RunMethod("getPaddingBottom"))
End Sub