Italian [B4X] Barra comandi / Barra Label - comuni a piu' form stessa app - come fare?

amorosik

Well-Known Member
Licensed User
Dispongo di un'app che gira su Android che dispone di 5 schermate
Supponiamo che su tre di queste ci siano dei command button identici che eseguono funzioni identiche, Exit, View, Print, Quit
Quattro su una, quattro sull'altra, quattro sull'altra, tutti uguali tra loro
Come fare per mantenere un'unica 'barra comandi' ed usarla su tre delle cinque schermate del programma?
Se fossero delle label invece dei command button,cambia qualcosa?
 

LucaMs

Expert
Licensed User
Longtime User
Nei layout di ogni pagina che conterrà quella "barra comandi" metti un Panel (pnlComandi) e ci carichi il layout che contiene i tasti o Label o quello che ti serve.

[Geniale, eh? 😄]
 

amorosik

Well-Known Member
Licensed User
Si, grazie
Non ho capito bene che differenza tra copiare i button da una schermata e incollarli su un'altra rispetto al tuo consiglio
Per generare gli eventi cui i tasti dovrebbero rispondere, comunque bisogna andare su ogni tasto di ogni form col destro Crea/Click
Poi gli eventi bisogna riempirli del codice opportuno
Tre command button x 3 form = 15 tasti da usare, creare eventi, infarcire di codice
Ma forse ho mal compreso il tuo consiglio
 

LucaMs

Expert
Licensed User
Longtime User
Non ho capito bene che differenza tra copiare i button da una schermata e incollarli su un'altra rispetto al tuo consiglio
Che significa "copiare i button da una schermata"? Dovresti specificare cosa intendi per "schermata".
Comunque, non c'è da copiare e se parli di Form forse sta parlando di B4J (cosa che comunque non cambierebbe la questione).
In ogni "form" (o Activity o B4XPage) dovrai caricare il tuo layout, no? A meno che (sbagliato) tu non crei tutte le view da codice! Questo layout conterrà anche un Panel da mettere sul fondo, che sarà il tuo "pannello comandi". Nell'Activity_Create (se parli di B4A "normale") metterai:
pnlComandi.LoadLayout("layComandi")
layComandi, creato nel Designer ovviamente, conterrà le View che il pannello dovrà contenere (tasti, Label o quello che vuoi). Non dovrai copiare e incollare alcunché.
E' chiaro che le routine-evento dovrai scriverle, non penso che in ogni Activity le azioni effettuate saranno le stesse, no?
 

Attachments

  • PanelComandi.zip
    13.8 KB · Views: 93
Last edited:

amorosik

Well-Known Member
Licensed User
Che significa "copiare i button da una schermata"? Dovresti specificare cosa intendi per "schermata".
Comunque, non c'è da copiare e se parli di Form forse sta parlando di B4J (cosa che comunque non cambierebbe la questione).
In ogni "form" (o Activity o B4XPage) dovrai caricare il tuo layout, no? A meno che (sbagliato) tu non crei tutte le view da codice! Questo layout conterrà anche un Panel da mettere sul fondo, che sarà il tuo "pannello comandi". Nell'Activity_Create (se parli di B4A "normale") metterai:
pnlComandi.LoadLayout("layComandi")
layComandi, creato nel Designer ovviamente, conterrà le View che il pannello dovrà contenere (tasti, Label o quello che vuoi). Non dovrai copiare e incollare alcunché.
E' chiaro che le routine-evento dovrai scriverle, non penso che in ogni Activity le azioni effettuate saranno le stesse, no?

Si, per Form intendo l'Activity o le P4XPage, mi scuso per l'imprecisione
Ogni B4XPage dispone del proprio layout
Quando dici 'questo layout conterra' anche un Panel..." intendi dire che su OGNI layout ci dovro' inserire un Panel coi tasti/label necessarie, giusto?
Se fosse cosi, non e' quello che desidero fare, che e' realizzare UNA volta il pannello comandi ed usarlo poi su diverse B4XPage senza modificarlo
 

LucaMs

Expert
Licensed User
Longtime User
Quando dici 'questo layout conterra' anche un Panel..." intendi dire che su OGNI layout ci dovro' inserire un Panel coi tasti/label necessarie, giusto?
No, non intendo quello. Guarda l'esempio anche se, non sapendo a quale tipo di progetto ti riferissi, quello è "normale" B4A.
 

amorosik

Well-Known Member
Licensed User
Ora e' perfettamente chiaro
Chissa' come mai non avevo visto l'esempio che hai incluso nel messaggio precedente
Non sapevo si potessero caricare piu' di un layout uno dopo l'altro
Era questo il motivo per cui non comprendevo le tue indicazioni
Molto gentile (e paziente), grazie
 

LucaMs

Expert
Licensed User
Longtime User
Con le B4XPages potresti anche fare differentemente.
Hanno, tra i tanti, il vantaggio di poter passare una View da una pagina all'altra, quindi potresti mettere il Panel nella B4XMainPage, già completa delle sue View, e poi farla apparire nella pagina che viene "aperta" (mostrata), prelevandola dalla B4XMainPage.
 

amorosik

Well-Known Member
Licensed User
Visto che ti sbilanci, mi sa che adesso ti tocca farci vedere come si fa :)
Come dire che la conoscenza e' un peso non indifferente
 

LucaMs

Expert
Licensed User
Longtime User
Come dire che la conoscenza e' un peso non indifferente
Senza che mi metta a sviluppare il progetto, ti basta sapere che se in una pagina, nella Class_Globals dichiari una View (essendo un progetto B4XPages meglio dichiararla come B4XView) come Public, è accessibile da dovunque e quindi puoi spostarla dove vuoi (ovviamente in altre pagine).

La rimuovi dalla pagina "attuale", ad esempio:
B4XPages.B4XMainPage.pnlComandi.RemoveFromParent
e l'aggiungi alla pagina corrente:
Root.AddView(B4XPages.B4XMainPage.pnlComandi, ....)
 
Top