German Draw 9 Patch Bilder

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hallo,

wie ist es möglich, Draw 9-Patch Bilder in einem Listview hinter einem Text darzustellen?

danke für jede Hilfe.

gruß
sinan
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hallo,

die Bilder, die ich mit PhotoShop erstelle, sehen toll aus aber nach dem ich sie mit den Draw-9-Patch tool bearbeitet habe und in mein App eingefügt habe, sehen die voll beschissen aus.

Kann mir einer sagen wo ran das liegt?
 

Kiffi

Well-Known Member
Licensed User
Longtime User
was heißt 'voll beschissen'? Kannst Du vielleicht zwei Bilder posten, damit wir
uns das mal ansehen können?

<vermutung>
Vielleicht liegt es an der Auflösung Deines Devices?
</vermutung>

Grüße ... Kiffi
 

klaus

Expert
Licensed User
Longtime User
In einer ListView habe alle Labels eines Layouts die gleichen Parameter !
Du kannst nur mit SingleLineLayout, TwoLineLayout und TwoLineAndBitmapLayout spielen ! Nut 3 verschiedene Layoutvarianten.
Wenn Du für jede Zeile andere Hintergrundbilder haben willst musst Du auf ScrollView oder CustomListView umsteigen.
Der Aufruf von BendenGelen(Label2.Text) ändert alle SingleLineLayout.Labels !

Beste Grüsse.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hallo Klaus,

ich habe mir einige CustomLV angeschaut, keines von den bekomme ich Draw-9-Patch Bilder rein.

Die sind total anders aufgebaut.

z.b.
Diese Eigenschaften fehlen mir
B4X:
ListView1.SingleLineLayout.Label.
SetNinePatchDrawable(ListView1.SingleLineLayout.Label, "karsidangelen")

oder kennst du einen CLV was du empfehlen kannst?

gruß
Sinan
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi Klaus,

ich brauche eine ernsthafte Hilfe

kannst du mir bitte einen ScrollView nennen, mit dem ich das realisieren kann?

ich habe fast alle CustomScrollviews runtergeladen, die ich hier gefunden habe. Mit keinem von denen könnte ich die Draw-9-Patch Bilder einbauen.

grüsse
sinan tuzcu
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi Klaus,


danke für die Datei.

Eine Frage, warum kann ich das mit den
B4X:
su.MeasureMultilineTextHeight(lbl, gelenmsg)

hier in dieser Zeile
B4X:
ScrollView1.Panel.AddView(lbl, 0,i, ScrollView1.Panel.Width, su.MeasureMultilineTextHeight(lbl, gelenmsg))

Hier im Code nicht anwenden?
B4X:
Sub Activity_Create(FirstTime As Boolean)
   Activity.LoadLayout("1")
   
   Dim i As Int
   For i = 0 To 30
      Dim lbl As Label
      lbl.Initialize("Label")
      gelenmsg = "Sinan bu bir yamu mesaji"
      
      ScrollView1.Panel.AddView(lbl, 0,i, ScrollView1.Panel.Width, su.MeasureMultilineTextHeight(lbl, gelenmsg))
      SetNinePatchDrawable(lbl, "karsidangelen")
   
      lbl.Tag = i
      lbl.TextColor = Colors.Black
      lbl.Text = gelenmsg
   Next
   ScrollView1.Panel.Height = i * LabelHeight
End Sub
 

klaus

Expert
Licensed User
Longtime User
B4X:
ScrollView1.Panel.AddView(lbl, 0,i, ScrollView1.Panel.Width, su.MeasureMultilineTextHeight(lbl, gelenmsg))
Das kann nicht funktionieren weil das System die Breite von lbl noch nicht kennt !
Versuche mal folgendes :
B4X:
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("1")
    
    Dim i As Int
    Dim ht = 0 As Int
    Dim TotalHeight = 0 As Int
    Dim r As Reflector

    For i = 0 To 30
        Dim lbl As Label
        lbl.Initialize("Label")
        gelenmsg = "Sinan bu bir yamu mesaji"
        
        ScrollView1.Panel.AddView(lbl, 0, TotalHeight, ScrollView1.Width, 50)
        SetNinePatchDrawable(lbl, "karsidangelen")
    
        lbl.Tag = i
        lbl.TextColor = Colors.Black
        lbl.Text = gelenmsg

        ht = su.MeasureMultilineTextHeight(lbl, gelenmsg)
        r.Target = lbl

        ht = su.MeasureMultilineTextHeight(lbl, gelenmsg)
        
        ht = ht + r.RunMethod("getPaddingTop")

        ht = ht + r.RunMethod("getPaddingBottom")

        lbl.Height = ht
        TotalHeight = TotalHeight + ht
    Next
    ScrollView1.Panel.Height = TotalHeight 
End Sub
Anschenend nimmt MeasureMultilineTextHeight die Patchwerte nicht in Betracht deshalb werden diese im obigne Code mit einbezogen.

Beste Grüsse.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Hi Klaus,

danke für deine Hilfe.
nach mehrmalige versuche, konnte ich die Breite der Label hier im code
B4X:
 ScrollView1.Panel.AddView(lbl, ScrollView1.Width-lbl.Width, TotalHeight, ScrollView1.Width-50, 100)

nicht von der Breite des Scrolview abziehen
B4X:
ScrollView1.Width-lbl.Width

lbl.Width
wird wahrscheinlich auch nicht vom System erkannt.
 

klaus

Expert
Licensed User
Longtime User
Beispiel:
Du wills ein Label in ein Panel hinzufügen.
B4X:
Dim Label1 As Label
Label1.Initialize("Label1")
Label1.Text = "Test"
' hier sind die Masse von Label1 noch nicht bekannt
Panel1.AddView(Label1, 10dip, 10dip, 100dip, 50dip)
' erst ab hier sind die Masse von Labes1 bekant !!!

' Du kannst also Label1.Width nicht in 
' Panel1.AddLabel(Label1, 10dip, 10dip, Label1.Width, 50dip) 
' benutzen denn sein Wert ist noch nicht definiert !!!
Beste Grüsse.
 

klaus

Expert
Licensed User
Longtime User
Da musst Du erst erklähren was Du genau machen willst.
Du kannst die Breite einer Variablen zuweisen und diese benutzen.
B4X:
Dim Label1 As Label
Label1.Initialize("Label1")
Label1.Text = "Test"
Dim Breite As Int
Breite = 100dip
Panel1.AddView(Label1, ScrollView1.Width - Breite, 10dip, Breite, 50dip)
' ab hier ist Label1:Width gleich 100dip
Beste Grüsse.
 

Sinan Tuzcu

Well-Known Member
Licensed User
Longtime User
Oder, ich könnte doch die länge der Label1.Text = "Test" ermitteln und daraus mir eine Breite definieren?
 
Top