Italian [Risolto] Parametri applicazione

Xfood

Expert
Licensed User
Salve ragazzi,
Vorre creare un layout scrollable nella mia applicazione per inserire i parametri, in pratica ho diversi parametri da inserire, e non entrano tutti sulla schermata principale, come si fa a far scorrere una una schermata piena di label ed edittext? Grazie mille a tutti
 

Star-Dust

Expert
Licensed User
Longtime User
usa una ScrollView.
crea nel design un panel con tutte le View dei parametri (penso siano editText) e lo agganci al ScrollView.
 
Last edited:

Xfood

Expert
Licensed User
usa una ScrollView.
crea nel design un panel con tutte le View dei parametri (penso siano editText) e li agganci al ScrollView.
Quindi creo un panel,
Inserisco cose tipo :
Label1 edittex1
Label2 edittext2
....
Label20 edittext20

Quindi e lungo e va fuori, salvo come parametri.bal,
E poi come aggancio questo layout alla scrollview?
Un esempino.... Grazie
 

Star-Dust

Expert
Licensed User
Longtime User
B4X:
Panel1.RemoveView
ScrollView1.Panel.Height=Panel1.Height
ScrollView1.Panel.AddView(Panel1, 0, 0, 100%x,Panel1.Height)
 

Xfood

Expert
Licensed User
Salve, sto provando una semplice customview, ma non riesco a fare scorrere un layout dentro una custom view, allego l'esempio
qualcuno potrebbe darmi una mano e capire dove sbaglio
Grazie mille

B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    
    Private xui As XUI
    Private CustomListView1 As CustomListView
    Private Button1 As Button
    Private Button2 As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("1")
    CustomListView1.Add(caricaLayout(CustomListView1.AsView.width,CustomListView1.AsView.Height),"")
    

End Sub

Sub Activity_Resume

End Sub

Sub caricaLayout(Width As Int, Height As Int) As Panel
    Dim p As B4XView = xui.CreatePanel("")
    p.SetLayoutAnimated(0, 0, 0, Width, Height)
    p.LoadLayout("2")
    Return p
End Sub
 

Attachments

  • customView_Layout.zip
    11.2 KB · Views: 228

LucaMs

Expert
Licensed User
Longtime User

Xfood

Expert
Licensed User
Innanzitutto, sbagli a non guardare i video tutorial ;)

Poi, in una xCLV, non devi caricare un layout che contiene i vari Item (righe, diciamo) come vedo che fai nel progetto (quello andrebbe meglio in una ScrollView ma non verrebbe bene ugualmente) ma devi aggiungere un Item per volta.

Guarda il video:
https://www.b4x.com/android/forum/t...-cross-platform-customlistview.84501/#content
speravo di poter creare un layout scrollable, mi sembrava piu semplice da gestire, altrimenti dovrei creare tanti layout ed inserirli uno ad uno?
ho dato un'occhiata al video... sarebe stato piu semplice per me un layout " lungo e scrollable".
 

Xfood

Expert
Licensed User
Quello diventa; ogni volta che aggiungi un elemento (item, riga o come vogliamo chiamarlo) viene aumentata l'altezza del pannello interno utilizzato, che diventa "scrollabile".
Grazie mille per l'idea,
l'ho modificato in questo modo, " a me viene piu semplice da gestire cosi:
B4X:
Sub Activity_Create(FirstTime As Boolean) 'ignore
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("1")
    'clv2.Add(CreateListItem($"Item #${i}"$, clv2.AsView.Width, 60dip), $"Item #${i}"$)
    Dim ItemWidth As Int = CustomListView1.GetBase.Width
    Dim ItemHeight As Int = 50dip
    For i = 1 To 11
        CustomListView1.Add(CreateItem(i, ItemWidth, ItemHeight), i)
    Next
End Sub

Sub Activity_Resume

End Sub

Sub CreateItem(Value As Int, Width As Int, Height As Int) As Panel
    Dim p As B4XView = xui.CreatePanel("")
         p.SetLayoutAnimated(0, 0, 0, Width, Height)
    Select Value
          Case 1
            p.LoadLayout("layItemSemplice")
            Label1.Text = "Item N. " & Value
          Case 2
            p.SetLayoutAnimated(0, 0, 0, Width, Height+200)
            p.LoadLayout("2")
        Case 3
            p.SetLayoutAnimated(0, 0, 0, Width, Height+20)
            p.LoadLayout("3")
        Case 4
            p.SetLayoutAnimated(0, 0, 0, Width, Height+200)
            p.LoadLayout("4")
        Case 5
            p.SetLayoutAnimated(0, 0, 0, Width, Height+20)
            p.LoadLayout("5")
        Case 6
            p.SetLayoutAnimated(0, 0, 0, Width, Height+200)
            p.LoadLayout("6")
        Case 7
            p.SetLayoutAnimated(0, 0, 0, Width, Height+20)
            p.LoadLayout("7")
        Case 8
            p.SetLayoutAnimated(0, 0, 0, Width, Height+200)
            p.LoadLayout("8")
        Case 9
            p.SetLayoutAnimated(0, 0, 0, Width, Height+20)
            p.LoadLayout("9")
        Case 10
            p.SetLayoutAnimated(0, 0, 0, Width, Height+200)
            p.LoadLayout("10")
        Case 11
            'p.SetLayoutAnimated(0, 0, 0, Width, Height+20)
            p.LoadLayout("layItemSemplice")
    End Select
    Return p
End Sub
 

Attachments

  • esempio_elementare.zip
    21.5 KB · Views: 247

LucaMs

Expert
Licensed User
Longtime User
Se hai N tipi diversi di Item, quello è il modo giusto. Se invece sono uguali - come numero e tipo di view, intendo, non come contenuto-testo, è il modo sbagliato.

Cmq, adesso scarico il tuo progetto allegato...
 

LucaMs

Expert
Licensed User
Longtime User
Da quel che vedo, hai due tipi di item che vuoi caricare:

Tipo A:
1582628724103.png



Tipo B:
1582628704605.png



Modifica la routine CreateItem in modo che riceva un parametro ItemType (metti magari due costanti... va beh, non voglio complicarti la vita, anche se il progetto sarebbe più "pulito") che magari sia di tipo stringa e contenga il "nome-descrizione" del tipo di Item e usa quello per la Select.
Dovrai avere anche due variabili per le differenti altezze dei due tipi di item.

ELIMINA L'AUTOSCALE ALL nel Designer, quando crei i layout degli Item!

Va beh, giusto perché voglio evitare di pensare ad altro - lo "aggiusto" come lo farei io e lo allego.
 

Xfood

Expert
Licensed User
Da quel che vedo, hai due tipi di item che vuoi caricare:

Tipo A:
View attachment 89141


Tipo B:
View attachment 89140


Modifica la routine CreateItem in modo che riceva un parametro ItemType (metti magari due costanti... va beh, non voglio complicarti la vita, anche se il progetto sarebbe più "pulito") che magari sia di tipo stringa e contenga il "nome-descrizione" del tipo di Item e usa quello per la Select.
Dovrai avere anche due variabili per le differenti altezze dei due tipi di item.

ELIMINA L'AUTOSCALE ALL nel Designer, quando crei i layout degli Item!

Va beh, giusto perché voglio evitare di pensare ad altro - lo "aggiusto" come lo farei io e lo allego.
grazie mille,
non e' detto che avro 2 tipi di item,
magare saranno vari controlli poi vedo quello che mi serve realmente,
comunque ho provato cosi e mi sembra grazioso
un solo layout cosi scrolla e funziona come pensavo io...


B4X:
Sub Activity_Create(FirstTime As Boolean) 'ignore
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("1")
    Dim ItemWidth As Int = CustomListView1.GetBase.Width
    Dim ItemHeight As Int = 50dip
    CustomListView1.Add(CreateItemx(ItemWidth, ItemHeight), 1)
   
End Sub

Sub Activity_Resume

End Sub
Sub CreateItemx( Width As Int, Height As Int) As Panel
    Dim p As B4XView = xui.CreatePanel("")
         p.SetLayoutAnimated(0, 0, 0, Width, Height+1500)
         p.LoadLayout("scx")
    Return p
End Sub
 

Attachments

  • esempio_elementare.zip
    12 KB · Views: 232

LucaMs

Expert
Licensed User
Longtime User
comunque ho provato cosi e mi sembra grazioso
un solo layout cosi scrolla e funziona come pensavo io...
Non ci siamo.

1 - le view del layout scx debordano dal variant
2 - se anche possa andar bene sul dispositivo che stai usando, non sarebbe altrettanto su qualunque dispositivo - con display completamente diverso in termini di risoluzione, rapporto base/altezza e densità di pixel
3 - se proprio vuoi fare una cosa di quel genere, usa una ScrollView; per far sì che diventi "scrollabile", a runtime devi soltanto aumentare l'altezza del panel interno della ScrollView:

Dim svMia As ScrollView
svMia.Panel.Height = 1230909dip <---- ovviamente scherzo, riguardo questo numero ;)
 
Last edited:

Sagenut

Expert
Licensed User
Longtime User
Puoi anche creare un unico item con un unico layout con tutto quello che vuoi lungo quanto vuoi.
Messo dentro la CLV o la Scrollview questo sarà scrollabile.
 

Xfood

Expert
Licensed User
Non ci siamo.

1 - le view del layout scx debordano dal variant
2 - se anche possa andar bene sul dispositivo che stai usando, non sarebbe altrettanto su qualunque dispositivo - con display completamente diverso in termini di risoluzione, rapporto base/altezza e densità di pixel
3 - se proprio vuoi fare una cosa di quel genere, usa una ScrollView; per far sì che diventi "scrollabile", a runtime devi soltanto aumentare l'altezza del panel interno della ScrollView:

Dim svMia As ScrollView
svMia.Panel.Height = 1230909dip <---- ovviamente scherzo, riguardo questo numero ;)
potresti postarmi un esempio di scrollView con la mia " anche se brutta" scx, per capire il funzionamento
cosi da non avere problemi con i vari device e schermi.
Grazie mille.
 
Top