Izdelava aplikacij, ki uporabljajo več ločenih zaslonov (Screens)

Izdelava aplikacij, ki uporabljajo več ločenih zaslonov (Screens)

Avtor: Ernest Gungl

Učni cilji: Poznam programske konstrukte za delo z več zasloni iste aplikacije in jih smiselno uporabljam: ustvarjanje več zaslonov, uporaba metod za odpiranje zaslonov, izmenjavo sporčil med zasloni, zapiranje zaslonov ter uporabo upravitelja dogodkov ob zapiranju katerega od zaslonov.

Uvod

Prva verzija App Invetor-ja, ki je podpirala izdelavo aplikacij z več zasloni, je bila verzija 42, ki je izšla 20. 12. 2011. Izdelava takšnih aplikacij se veliko ne razlikuje od običajnih, ki uporabljajo samo en zaslon. Aplikacije, ki uporabljajo več zaslonov si moramo zamišljati kot več samostojnih (eno-zaslonskih) aplikacij, ki med seboj komunicirajo z izmenjavo sporočil. Vsak zaslon, ki ga ustvarimo ima svoje komponente v oknu za načrtovanje (Designer). V urejevalniku blokov, kjer sestavljamo kodo programa (Block Editor) lahko vidimo le te komponente in nobene komponente iz drugih zaslonov te aplikacije.

Pomembna informacija: Nobena od komponent, definicij spremenljivk in procedur ali funkcij, ki jih definiramo v enem od zaslonov, ni dosegljiva v kateremkoli drugem zaslonu.

Delo z glavnim zaslonom (Screen1)

Kadarkoli ustvarimo novo aplikacijo (nov projekt), App Inventor samodejno ustvari zaslon in ga poimenuje Screen1. Medtem, ko lahko spremenimo njegov naslov v oknu Properties, ne moremo spremeniti imena zaslona (Gumb za preimenovanje Rename za Screen1je onemogočen). Glavni zaslon je torej vedno imenovan Screen1. Na naslednji sliki je prikazan posnetek dela glavnega zaslona v oknu Designer, kar lahko vidimo iz imena Screen1. Čeprav imena ne moremo spremeniti, pa lahko spremenimo njegov naslov.

(sl1.PNG)
Slika 1: Glavni zaslon Screen1

Nov zaslon ustvarimo s klikom na gumb »AddScreen …«. Njegovo ime lahko preimeujemo.

(sl2.PNG)
Slika 2: Imenovanje zaslona ...

V oknu Properties za izbran zaslon mu spremenimo še naslov (Title) na Ekranček 2.

(sl3.PNG)
Slika3: Spremenjen privzeti naslov zaslona

Komunikacija med zasloni

Večino metod potrebnih za komunikacijo med zasloni lahko najdemo v podsklopu Control sklopa Blocks. Najpomembnejši upravitelj dogodkov pa se imenuje .OtherScreenClosed, ki zazna zapiranje enega od vzporednih zaslonov aplikacije. Do njega pridemo s klikom na gradnik Screen. Spodnja slika prikazuje najpogosteje uporabljene metode in upravitelj dogodkov.

(sl4.PNG)
Slsika 4: Najpogosteje uporabljene metode in upravitelj dogodkov

Najosnovnejša uporabo zagotavljajo gradnik »Open Another Screen«, ki odpre drug zaslon z imenom ScreenName (slika spodaj). Ime zaslona, ki ga želimo v tem primeru odpreti se imenuje Screen2 (privzeto ime pri ustvarjanju drugega zaslona). To ime lahko preimenujemo takoj po ustvarjanju, kasneje pa več ne. Zamislimo si, da smo na zaslon Screen1 posadili gumb Odpri zaslon Screen2.

(sl5.PNG)
Slika 5: Uporabniški vmesnik zaslona Screen1

Koda, ki se naj izvede ob pritisku na gumb naj odpre zaslon Screen2, ki smo ga pred tem že ustvarili.

(sl6.PNG)
Slika 6: Koda za odpiranje drugega zaslona

Zaslon Screen 2 smo opremili z gumbom Zapri trenutni ekran, ki pokliče metodo »close screen«n (slika spodaj).

(sl7.PNG)
Slika 7: Zapiranje zaslona

Nekoliko zahtevnejša komunikacija med zasloni

Sedaj bomo pokazali še nekoliko naprednejšo rabo gradnikov za delo z več zasloni. Zamislimo si podobno aplikacijo kot prej, le da sedaj želimo ob kliku gumba »Odpri zaslon Screen2«, da nam poleg odpiranja zaslona Screen2 prenese v ta ekran še sporočilo »Pozdravljen sosed«

(sl8.PNG)
Slika 8: Odpiranje drugega zaslona z vrednostjo startValue

V ta namen uporabimo metodo »open another screen with start value«. screenName je ponovno ime zaslona, ki ga želimo odpreti, startValue pa predstavlja sporočilo, ki ga želimo poslati zaslonu Ko se zaslon Screen2 odpre, ob inicializaciji izpiše prejeto sporočilo na zaslon. To sporočilo prikličemo preko parametra »start value«, ki ga najdemo znotraj podbloka Control bloka Blocks.

(sl9.PNG)
Slika 9: Koda, ki izpiše prjeto sporočilo

Ob pritisku na gumb Zapri zaslon (Button2) pokličemo metodo »close screen with value«, ki pošlje sporočilo, pripeto parametru result.

(sl10.PNG)
Slika 10: Metoda, ki zapre zaslon in pošlje sporočilo

Da lahko zaslon Screen1 prejme poslano poročilo, mora realizirati upravitelj dogoskov .OtherScreenClosed. Kot lahko vidimo iz slike spodaj, le-ta prejme dva parametra result (poslano sporčilo) in otherScreenName (na osni njega se lahko odločimo, če bomo sporočilo prejeli). Ker v našem primeru imamo le dva zaslona, tega ni potrebno preverjati. Kot vidimo spodaj, prejeto sporočilo priredimo oznaki Label1.text, ki izpiše sporočilo na zaslon Screen1.

(sl11.PNG)
Slika 11: Upravitelj opravilj .OtherScreenClosed

Naslednji sliki prikazujeta zaslonsko sliko zaslona Screen1 (levo) in Screen2 (desno).

(sl12.PNG)
Slika 12: Uporabniški vmesnik zaslona Screen1 in Screen2
0%
0%