Italian domanda su b4i sulla ridimensionatura delle view.

fifiddu70

Well-Known Member
Licensed User
Longtime User
Ciao colleghi, in b4a settavo ad esempio: edittext.setlayout(0%x,05Y,20%x,10%) in questo modo avevo in qualsiasi dimensione di schermo sempre la stessa posizione della edittext, mentre in b4i caricando il layout ed inserendo nel designer le varie view come posso fare a fare la stessa cosa per evitare che tra un iphone o un ipad le view siano posizionate allo stesso posto?
 
D

Deleted member 103

Guest
Ciao collega?!
in principio è lo stesso se fai tutto dal designer.
Se invece devi o vuoi farlo da codice, allora lo puoi fare solo nel Sub/ Event "Resize".
B4X:
Private Sub Page1_Resize(Width As Int, Height As Int)
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Filippo.....da codice nessun problema con page1.rootpanel.addview(edittext,10%x,10%y,30%x,20%y)
il problema è da designer che codice devo usare per evitare che le impostazioni delle view sballano ad un'altra risoluzione?
 

LucaMs

Expert
Licensed User
Longtime User
Premesso che non ho b4i...
page1.rootpanel.addview
vedo che vuoi aggiungere una View (EditText) ad un pannello. Con b4a (e quindi al 99% con b4i) il modo migliore di caricare un pannello con delle view è caricarci un layout senza AutoScaleAll (sempre sfruttando ancoraggi e Script).
 
D

Deleted member 103

Guest
Filippo.....da codice nessun problema con page1.rootpanel.addview(edittext,10%x,10%y,30%x,20%y)
il problema è da designer che codice devo usare per evitare che le impostazioni delle view sballano ad un'altra risoluzione?
Se non vuoi che le view cambiano nelle diverse risoluzioni, allora non devi usare le percentuali "%" e neanche "AutoScaleAll".
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Puoi farmi un esempio scritto?, allora ho 3 view in un layout chiamato pagina base, altre 3 su un'altro layout chiamato ordine, questo ovviamente è un esempio,
come faccio a fare in modo che le view dei due layout rimangono per come le vedo con il mio iphone 5 e poi alla stessa posizione con ad esempio iphone 6 o iphone 7 etc.?
abituato a lavorare con quelle percentuali adesso mi trovo in difficoltà, se potresti buttare giù due righe di codice di esempio anche su un solo layout che abbiano almeno 3 o 4 view: editext, label, imageview, webview, etc. da quel che ho capito sembra che realizzando una view tutta da codice senza designer ci sia più probabilità che l'app potrebbe crashare in alcuni modelli ogni tanto,quindi sto cercando di usare il designer ed inserire nei vari layout le view, ma se non capisco come vederle tra un iphone 5 ed unaltro più grande di schermo allora sono nei guai.
 

Star-Dust

Expert
Licensed User
Magari potresti allegare tu il layout e Filippo potrebbe aggiustartelo (da Designer, spero).
Stai diventando pigro, prima elargivi codice sorgente a iosa, adesso fai il prezioso. 😁
Questo confinamento (per gli anglofili lockdown) ti sta impigrendo.
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
B4X:
    #ApplicationLabel: Alte Ego menu
    #Version: 1.0.0
    'Orientation possible values: Portrait, LandscapeLeft, LandscapeRight and PortraitUpsideDown
    #iPhoneOrientations: Portrait, LandscapeLeft, LandscapeRight
    #iPadOrientations: Portrait, LandscapeLeft, LandscapeRight, PortraitUpsideDown
    #Target: iPhone, iPad
    #ATSEnabled: True
    #MinVersion: 8
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'Public variables can be accessed from all modules.
    Public App As Application
    Public NavControl As NavigationController
    Private Page1 As Page
    Private pnlstart As Panel
    Private pnldati As Panel
    Private pnlweb As Panel
    Private pnlordine As Panel
    Private txtdati As TextField
    Private imgconfermadati As ImageView
    Private lblinfodati As Label
    Private lbldescdati As Label
    Private imgalterego As ImageView
    Private imgbackdati As ImageView
    Private imgdati As ImageView
    Private imgmenu As ImageView
    Private imglista As ImageView
    Private lblinfomenu As Label
    Private WebView1 As WebView
    Private imgpizzeria As ImageView
    Private imgpanini As ImageView
    Private imgristorante As ImageView
    Private imgcocktail As ImageView
    Private imgvarie As ImageView
    Private imgbackweb As ImageView
    Private txtordine As TextField
    Private imgaggiungi As ImageView
    Private imgbackordine As ImageView
    Private imginvio As ImageView
    Private imgsplashscreen As ImageView
    Private imgsfondo1 As ImageView
    Private imgsfondoordine As ImageView
    Private imgsfondoweb As ImageView
    Private imgsfondostart As ImageView
End Sub

Private Sub Application_Start (Nav As NavigationController)
    'SetDebugAutoFlushLogs(True) 'Uncomment if program crashes before all logs are printed.
    NavControl = Nav
    Page1.Initialize("Page1")
    Page1.Title = "Alter Ego - Partanna"
    Page1.RootPanel.Color = Colors.White
    NavControl.ShowPage(Page1)
    Page1.RootPanel.LoadLayout("alterego")

    
    
    
End Sub

Private Sub Page1_Resize(Width As Int, Height As Int)
    
End Sub

Private Sub Application_Background
    
End Sub


Sub imgconfermadati_Click
    
End Sub

Sub imgbackdati_Click
    
End Sub

Sub imgdati_Click
    
End Sub

Sub imgmenu_Click
    
End Sub

Sub imglista_Click
    
End Sub

Sub imgpizzeria_Click
    
End Sub

Sub imgpanini_Click
    
End Sub

Sub imgristorante_Click
    
End Sub

Sub imgcocktail_Click
    
End Sub

Sub imgvarie_Click
    
End Sub

Sub imgbackweb_Click
    
End Sub

Sub imgaggiungi_Click
    
End Sub

Sub imgbackordine_Click
    
End Sub

Sub imginvio_Click
    
End Sub

Filippo, o chiunque...spero possiate aiutarmi.
 

Attachments

  • alterego.zip
    2.6 KB · Views: 99

LucaMs

Expert
Licensed User
Longtime User
Stai diventando pigro, prima elargivi codice sorgente a iosa, adesso fai il prezioso. 😁
Questo confinamento (per gli anglofili lockdown) ti sta impigrendo.
No, è che non ho B4i, altrimenti lo avrei fatto con molto piacere (anche perchè, pur di perdere tempo ed evitare di fare ciò che dovrei, farei "qualunque" cosa 😄)
 
Last edited:

udg

Expert
Licensed User
Longtime User
Non uso B4i, ma come regola generale per il Designer biosgna pensare prima in termini di Anchors e poi di Script.
Un sempio banale: se desidero un tasto posizionato nell'angolo in basso a destra, ne imposto la distanza dal bordo inferiore (es. 10 dip) e dal bordo destro (es. 10 dip), poi come anchor orizzontale seleziono destra e come anchor verticale seleziono bottom.
Diverso è il discorso se desidero che quel tasto occupi il 20% dello spazio disponibile orizzontalmente (in pratica divine più o meno lungo in funzioen del display).
In questo caso agisco da Script, dove calcolo dimensione e posizione del tatso in base alle dimensioni del suo container
 

LucaMs

Expert
Licensed User
Longtime User
Un sempio banale: se desidero un tasto posizionato nell'angolo in basso a destra, ne imposto la distanza dal bordo inferiore (es. 10 dip) e dal bordo destro (es. 10 dip), poi come anchor orizzontale seleziono destra e come anchor verticale seleziono bottom.
Per abitudine (ma credo anche per "efficienza") faccio in modo molto simile, ma inverso; posiziono la View più o meno nella posizione voluta, poi imposto gli ancoraggi ed infine scrivo le distanze dai bordi. Questo perché impostando prima gli ancoraggi, il testo delle proprietà cambia, lo leggo e sono certo di aver ancorato "bene" - entrambi lati, in questo caso.

Una cosa "interessante" che forse non tutti sanno è che se in una fila orizzontale di view una sola di queste viene ancorata su entrambi i lati (verticali, diciamo), la cosa viene molto bene (stessa cosa per una eventuale "colonna" di View, in senso opposto).

P.S. se imposti "ancoraggio su entrambi i lati" su più di una View nella fila (o colonna), esce fuori un macello. Tanto per chiarire.
 

udg

Expert
Licensed User
Longtime User
Credo sia specificato da qualche parte che solo una view in una riga può avere BOTH come ancoraggio. Idem per le view in colonna.
In un classico menu alla JustEat (tanto per fare un nome) avresti un header (pannello o label) con anchor orizzontale BOTH e verticale TOP. Idem per un footer, ma con anchor verticale posto a BOTTOM. In mezzo avresti una xCLV, un pannello o quello che ti serve con entrambe le anchor a BOTH.

Edit: per abitudine, a me piace avere un pannello di fondo (pnlbck) che occupa l'intero spazio (quindi entrambe el anchor a BOTH e copertura integrale dello spazio). Tutte le view che costituiscono il layout vengono posizionate su questo pannello di fondo in relazione ai suoi bordi ed in relazione tra loro (se occorre).
 

udg

Expert
Licensed User
Longtime User
Non ho idea, io sono sposato (aargh, misogino, negazionista della parità di genere, etc etc) :)
A dirla tutta, non so neanche dove sia la cucina in casa mia..ehehe
OK, prima di accusarmi di ogni nefandezza, riflettete: qualche minimo, residuale vantaggio derivante dalla firma del contratto matrimoniale vogliamo conservarlo? :D

ps: scherzo; e scusate se vi lascio così, ma ha detto che dobbiamo uscire... :(
 
Top