Italian [Risolto] [B4A] CLV ed il suo bordo

Aldo's

Active Member
Licensed User
Buon pomeriggio,
ho creato una CLV che popolo di due label per ogni riga.
Nel Designer ho settato il bordo della CLV. A vuoto, cioè quando la CLV non è popolata, lo mostra regolarmente.
Quando inizia a popolarsi la CLV, man mano che aggiungo righe mi toglie il bordo e considera solo le label che contengono i dati.
Dove sbaglio?
Se devo allegare qualcosa ditemi cosa.
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Saaalve.

Se allegassi il layout, non dico il progetto, anche se ovviamente sarebbe ancora meglio, sarebbe più facile scoprire la magagna.

A naso, forse l'item va a coprire il bordo della CLV? Se carichi solo un paio di item, il resto della CLV ha ancora il bordo?

Questa parte non l'ho capita:
e considera solo le label che contengono i dati.
 

Aldo's

Active Member
Licensed User
A naso, forse l'item va a coprire il bordo della CLV?
Sicuro, ho provato a mettere sotto le label un panel e aggiungere un bordo a questo e va già meglio, ma "quasi".
Se carichi solo un paio di item, il resto della CLV ha ancora il bordo?
Si
Comunque mando due screen uno prima del panel e uno dopo così si vede tutto meglio
 

Attachments

  • Due.jpg
    Due.jpg
    60.9 KB · Views: 72
  • Uno.jpg
    Uno.jpg
    68.2 KB · Views: 81

LucaMs

Expert
Licensed User
Longtime User
Boh. Io intendevo dire che se facessi "meglio" il layout degli item, distanziando un pochino le due label dai bordi, senza dover aggiungere un Panel, dovresti ancora vedere il bordo della CLV, che forse viene sovrapposto da queste. In realtà, però, non dovrebbe.
Giostra anche con l'AUTOSCALEALL, che quando si tratta degli item delle CLV sarebbe meglio "commentare" - disattivare.
 

Aldo's

Active Member
Licensed User
Giostra anche con l'AUTOSCALEALL, che quando si tratta degli item delle CLV sarebbe meglio "commentare" - disattivare.
Scusa la mia enorme ignoranza, cosa vuol dire?
 

Aldo's

Active Member
Licensed User
Ho risolto (???) in questo modo:
B4X:
        p.SetLayoutAnimated(0,0,0,100%x-22dip,40dip)
Considerando che la CLV ha Left = 10 e Right Edge Distance = 10, ho aggiunto 1dip a sinistra e 1dip a destra e mi viene giusto...ma la soluzione a me sembra posticcia.
 

Aldo's

Active Member
Licensed User
Nello script (B4A) c'è:

AutoScaleAll

che in pratica adatta UN PO' le view al display. Quando crei gli item per una CLV ti consiglierei di non usarlo, "commentare" la riga.
Provo
 

LucaMs

Expert
Licensed User
Longtime User
Ho risolto (???) in questo modo:
B4X:
        p.SetLayoutAnimated(0,0,0,100%x-22dip,40dip)
Considerando che la CLV ha Left = 10 e Right Edge Distance = 10, ho aggiunto 1dip a sinistra e 1dip a destra e mi viene giusto...ma la soluzione a me sembra posticcia.
Non mi convince, perché quel -22dip potrebbe andare bene per il tuo dispositivo (smartphone, suppongo) ma non per altri. Prova a vedere come verrebbe cambiando:

1705333765239.png
 

LucaMs

Expert
Licensed User
Longtime User
Non mi convince, perché quel -22dip potrebbe andare bene per il tuo dispositivo (smartphone, suppongo) ma non per altri. Prova a vedere come verrebbe cambiando:

View attachment 149724
Uhm... questo consiglio è solo relativamente utile, non nel caso delle CLV, perché gli item caricati non potresti vederli, non si possono aggiungere nel Designer.
Cmq, in generale è utile.
 

Aldo's

Active Member
Licensed User
Uhm... questo consiglio è solo relativamente utile, non nel caso delle CLV, perché gli item caricati non potresti vederli, non si possono aggiungere nel Designer.
Cmq, in generale è utile.
Tra poco provo fisicamente con un tablet con diversa risoluzione e vediamo
 

Aldo's

Active Member
Licensed User
Manda pure l'IBAN, il giusto per ogni dispositivo ti verrà ricompensato...basta che non ti aspetti molto!!!?
Ho fatto prova con smartphone e tablet. Buona parte del problema si è risolta con un apice in AutoScaleAll.
A livello di codice ho inserito:
B4X:
        p.SetLayoutAnimated(0,0,0,100%x-20dip,40dip)
Questa riga dovrebbe indicare per tutte le risoluzioni la larghezza corretta del Layout della CLV.
Adesso funziona...
...e ha più senso di prima.
Comunque testerò ancora un po'.
 

LucaMs

Expert
Licensed User
Longtime User
Manda pure l'IBAN, il giusto per ogni dispositivo ti verrà ricompensato...basta che non ti aspetti molto!!!?
Ho fatto prova con smartphone e tablet. Buona parte del problema si è risolta con un apice in AutoScaleAll.
A livello di codice ho inserito:
B4X:
        p.SetLayoutAnimated(0,0,0,100%x-20dip,40dip)
Questa riga dovrebbe indicare per tutte le risoluzioni la larghezza corretta del Layout della CLV.
Adesso funziona...
...e ha più senso di prima.
Comunque testerò ancora un po'.
Immagino che p sia il pannello-item.
Ok farlo un po' più stretto, 20 o 10 dip, ma poi devi anche centrarlo.
Cioè se lo fai 20dip più stretto, dovrai mettere il left a 10dip.
 

Aldo's

Active Member
Licensed User
Immagino che p sia il pannello-item.
Ok farlo un po' più stretto, 20 o 10 dip, ma poi devi anche centrarlo.
Cioè se lo fai 20dip più stretto, dovrai mettere il left a 10dip.
p è il pannello-item
Io ho messo 100%x-20dip perchè è la larghezza relativa del pannello rispetto allo schermo...spero di avere capito bene.
Poi all'interno del layout della CLV (che io chiamo ItemCLV1) ho messo le due label con le relative larghezze ed ancoraggi.
Spesso "mi spezzo ma non mi spiego"...se ho fatto o detto qualche baggianata correggimi...che mi serve.
 

LucaMs

Expert
Licensed User
Longtime User
p è il pannello-item
Io ho messo 100%x-20dip perchè è la larghezza relativa del pannello rispetto allo schermo...spero di avere capito bene.
Poi all'interno del layout della CLV (che io chiamo ItemCLV1) ho messo le due label con le relative larghezze ed ancoraggi.
Spesso "mi spezzo ma non mi spiego"...se ho fatto o detto qualche baggianata correggimi...che mi serve.
Spiegare 'sta roba non è semplice.
Non vuoi allegare il layout (ed il codice col quale carichi la CLV)?

Oppure:

1 - pubblica immagini dei layout (screenshot) ed il codice di cui sopra
2 - mandami roba in privato - progetto oppure layout e quella parte di codice
 

Aldo's

Active Member
Licensed User
Questo è il codice per caricare la CLV:
B4X:
Private Sub clv1_ItemClick (Index As Int, Value As Object)
    Main.lID=alID(Index)
    Dim query As String
    query="SELECT * FROM contatti WHERE id = " & Main.lID
    SQL1.Initialize(Main.DBDir, Main.DBark, False)
    RS1 = SQL1.ExecQuery(query)
    Do While RS1.NextRow
        lblN.As(Label).Text=" " & RS1.GetString("nome")
        lblC.As(Label).Text=" " & RS1.GetString("cognome")
        Dim i As Int = 0
        Dim tmp_lst As List : tmp_lst.Initialize
        Dim RS2 As ResultSet
        RS2=SQL1.ExecQuery("SELECT * FROM telefoni WHERE id = " & Main.lID)
        Do While RS2.NextRow
            tmp_lst.Add(RS2.GetString("telefono"))
            asTel(i)=RS2.GetString("telefono")
            i=i+1
        Loop
        RS2.Close
        pckTel.SetItems(0,tmp_lst)
    Loop   
    pckTel.Refresh
    SQL1.Close
End Sub

Questi sono gli screen dei due layout, se ti serve qualcosa di più specifico delle proprietà chiedi pure.
 

Attachments

  • Screen1.png
    Screen1.png
    107.3 KB · Views: 72
  • Screen2.png
    Screen2.png
    92.3 KB · Views: 67

Aldo's

Active Member
Licensed User
Scusa, c'hai ragione!
B4X:
Private Sub CaricaCLV1
    Dim i As Int = 0
    Dim query As String
    clv1.Clear
    query="SELECT * FROM contatti "
    If bOrd=0 Then
        query=query & "ORDER BY nome, cognome"
    Else
        query=query & "ORDER BY cognome, nome"
    End If
    SQL1.Initialize(Main.DBDir, Main.DBark, False)
    RS1 = SQL1.ExecQuery(query)
    Do While RS1.NextRow
        Dim p As B4XView = xui.CreatePanel("")
        p.SetLayoutAnimated(0,0,0,100%x-20dip,40dip)
        p.LoadLayout("ItemCLV1")
        lblNome.As(Label).Text=RS1.GetString("nome")
        lblCognome.As(Label).Text=RS1.GetString("cognome")
        clv1.Add(p,"")
        alID(i)=RS1.GetInt("id")
        i=i+1
    Loop
    SQL1.close
End Sub
 
Top