· 6 years ago · Nov 29, 2019, 02:12 PM
11. Na početnom ekranu (Welcome to Android Studio) izabrati Start a new Android Studio project. Ukoliko je već otvoren neki projekat, izabrati File → New → New Project. 2. U prozoru Choose your project (Slika 1) izabrati Empty Activity i kliknuti na Next
23. Unutar Configure your project prozora unijeti sljedeće: • Name: "Zivotni ciklus aktivnosti" • Package name: "com.example.zivotniciklusaktivnosti" • podesiti lokaciju gdje će projekat biti sačuvan • Language: "Java" • podesiti željeni API nivo. 4. Kliknuti na Finish. 5. Nakon nekog vremena otvoriće se Arduino studio IDE
3Provjeriti da li je otvoren prozor Project i ako nije otvoriti ga (View → Tool Windows → Project). Takođe, provjeriti da li je iz padajućeg menija u vrhu Project prozora izabran Android i ako nije izabrati ga.
4
56. Modifikovati MainActivity da prikaže pop-up poruku svaki put kad aktivnost prođe kroz neku od faza životnog ciklusa:
6
7
87. Izvršiti aplikaciju na emulatoru/uređaju. Treba da se vidi sekvenca: Kreiranje(onCreate) - Startovanje (onStart) - Nastavak (onResume). 8. Kliknuti na dugme „back“. Treba da se vidi sekvenca: Pauza (onPause) - Stop (onStop) - Završetak (onDestroy). 9. Startovati ponovo aplikaciju. Treba da se ponovo vidi sekvenca: Kreiranje(onCreate) - Startovanje (onStart) - Nastavak (onResume). 10. Kliknuti na dugme „home“ (dugme u sredini). Treba da se vidi sekvenca: Pauza (onPause) - Stop (onStop). 11. Vratiti se u aplikaciju. Treba da se vidi sekvenca: Restartovanje (onRestart) - Startovanje (onStart) - Nastavak (onResume).
91. U terminal prozoru otkucati: telnet localhost 5554 2. Kada se pojavi odgovor od Android konzole, otkucati: gsm call 123456 3. Na ekranu emulatora će se pojaviti notifikacija poziva, koja će djelimično prekriti prozor tekuće aktivnosti. Ako se izabere odbijanje poziva (Dismiss) notifikacija će nestati i neće se pojaviti pop-up poruke. 4. U terminal prozoru ponovo otkucati: gsm call 123456 5. Ako se poziv prihvati (Answer), pojaviće se poruke Pauza (onPause) – Stop (onStop) i aktivnost phone aplikacije će potpuno prekriti tekuću aktivnost. 6. Kada se okonča poziv, aktivnost phone aplikacije će nestati i na ekranu se ponovo pojavljuje prethodna aktivnost sa porukama Restartovanje (onRestart) - Startovanje (onStart) - Nastavak (onResume).
10
11Napomena: Ako se koristi neki eksterni program za Telnet, treba ga podesiti tako što će se za "Host Name" staviti "localhost", za "Port" staviti "5554" i za protokol izabrati "Telnet". Kod nekih sistema treba izabrati "raw" protokol umjesto "Telnet".
12
13Dodatak – super keyword
14Super je ključna riječ u Javi.
15Koristi se: • Unutar definicije metode izvedene klase, da bi se pozvala metoda definisana u baznoj (roditeljskoj) klasi (super klasi). Ne mogu se pozivati privatne (private) metode bazne klase, već samo javne (public) i zaštićene (protected) metode. • U okviru konstruktora izvedene klase da pozove konstruktor bazne klase. Uvijek je potrebno pozivati odgovarajući konstruktor bazne klase u konstruktorima izvedene klase. Poziv konstruktora bazne klase mora biti prva naredba u tijelu konstruktora izvedene klase. Ukoliko to nije slučaj, kompajler će sam ubaciti poziv podrazumijevanog konstrukotra bazne klase (bez parametara, što uzrokuje grešku).
16Simulacija dolaznog telefonskog poziva
17Da bi se izvršila simulacija dolaznog telefonskog poziva kod Android simulatora, potrebno je pokrenuti Telnet aplikaciju. Može se koristiti bilo koja aplikacija za Telnet (npr. Putty), ali i Android studio u svom okruženju ima podršku za Telnet-ovanje. Potrebno je u donjem dijelu radnog prostora Android studija otvoriti prozor za Terminal
181. Na početku treba otvoriti Layout editor: u prozoru Project otvoriti fajl app > res > layout > activity_main.xml. Layout editor (Slika 1) ima dva tab-a: Design i Text. U Design prozoru se korisnički interfejs kreira grafički, a u Text prozoru se opisuje tekstualno koristeći XML. U daljem radu će se koristiti Design prozor, pa njega treba izabrati. U ovom prozoru se nalaze dvije podloge, jedna bijele i jedna tamnije boje. Na bijeloj podlozi se prikazuje korisnički interfejs onako kako će izgledati na uređaju, a tamnija podloga je tzv. blueprint (prikazuju se okviri svakog elementa, bez obzira da li je element zaklonjen nekim drugim
19elementom). Pomoću dugmeta i pripadajućeg menija, može se izabrati koja podloga će biti prikazana u ovom prozoru. 2. Pritisnuti dugme i čekirati opciju Show All Constraints. 3. Opcija Autoconnect treba da bude isključena (dugme treba da izgleda ovako: ). 4. Kliknuti na dugme Default Margins i izabrati 16
205. Ukloniti postojeći TextView (sa tekstom „Hello World!“) tako što se selektuje i pritisne taster delete. 6. U panelu Palette kliknuti na Text da bi se prikazale tekst kontrole. 7. Prevući kontrolu Plain Text u dizajn editor i pozicionirati je pri vrhu prozora (layout-a). Ova kontrola (EditText widget) omogućava unos teksta. 8. Kada se selektuje kontrola (klikom na nju unutar dizajn editora) pojavljuju se kvadratni simboli na uglovima, preko kojih se može vršiti promjena veličine objekta. Takođe, pojavljuju se i kružni simboli koji služe kao veze preko kojih se uređuje međusobni položaj kontrola.
219. Povući kružni simbol na gornjoj stranici do vrha prozora i tu ga otpustiti. Kontrola će biti automatski postavljena na 16 dp od vrha prozora (koliko je postavljena podrazumijevana margina u koraku 4). 10. Ponoviti isto sa lijevom stranom kontrole prema lijevoj ivici prozora. Slika 2 prikazuje izgled prozora nakon podešavanja položaja tekst kontrole u odnosu na gornju i lijevu ivicu prozora.
2211. U panelu Palette kliknuti na Buttons da bi se prikazale kontrole za dugmad. 12. Prevući kontrolu Button u dizajn editor i pozicionirati je pri desnoj ivici prozora (layout-a). 13. Podesiti razmak između tekst kontrole i dugmeta: povući kružni simbol sa lijeve ivice dugmeta prema kružnom simbolu na desnoj ivici tekst kontrole. Razmak će se automatski podesiti na 16 dp (podrazumijevana margina). 14. Da bi se vodoravno poravnale ove dvije kontrole treba selektovati dugme (klikom na njega), pritisnuti desni taster miša i iz menija izabrati Show Baseline 15. Pojaviće se oznaka za poravnavanje unutar dugmeta. Povući ovu oznaku prema odgovarajućoj oznaci koja će se pojaviti unutar tekst kontrole i otpustiti dugme miša. Time je izvršeno i horizontalno poravnavanje
2316. Sada je potrebno kreirati natpise koji će se nalaziti na ovim kontrolama. U Project prozoru otvoriti fajl app > res > values > strings.xml. U ovom fajlu se navode svi stringovi koji se koriste u projektu kako bi se nalazili na jednom mjestu i time se lakše uređivali (mijenjali, prevodili na više jezika, ...). 17. Izabrati Open editor u gornjem desnom uglu prozora. Otvoriće se Translations Editor, pomoću kojega se unose i mijenjaju stringovi, a služi i za organizaciju prevoda tih stringova na više jezika. 18. Kliknuti na Add Key (simbol + u gornjem lijevom uglu prozora) da bi kreirali novi string koji će služiti kao "hint" za tekst kontrolu. Pojaviće se novi prozor (Add Key) pomoću kojega se unosi novi string (Slika 5).
2419. Unutar Add Key prozora unijeti sljedeće: • Key: "poruka" • Default Value: "unesite poruku" U Resource Folder ostaviti ponuđeni sadržaj. 20. Dodati još jedan string (na isti način kao u prethodnim koracima) sa vrijednostima: "dugme" (Key) i "Pošalji" (Default Value). 21. Vratiti se u dizajn editor (izabrati tab "activity_main.xml"). 22. Selektovati tekst kontrolu. U Attributes prozoru, sa desne strane radne površine, izabrati atribut "text", koji trenutno ima vrijednost "Name", i obrisati ovu vrijednost. 23. Izabrati atribut "hint" i kliknuti na simbol koji se nalazi desno od boksa za unos teksta (Pick a Resource). U prozoru koji se pojavi (Pick a Resource) selektovati (dvoklikom) polje poruka. 24. Selektovati dugme i izabrati atribut "text", koji trenutno ima vrijednost "Button". 25. Kliknuti na simbol koji se nalazi desno od boksa za unos teksta (Pick a Resource). U prozoru koji se pojavi (Pick a Resource) selektovati (dvoklikom) polje dugme. Slika 6 prikazuje trenutni izgled radnog ekrana u dizajn editoru.
25Ukoliko želimo da se korisnički interfejs prilagođava različitim veličinama ekrana uređaja na kojima će se program izvršavati, potrebno je obezbijediti da se kontrole rašire kako bi zauzele čitavu površinu koja preostane nakog rezervisanja prostora za margine. Da bi se ovo postiglo treba izvršiti sledeće korake. 26. Selektovati obje kontrole: selektovati jednu, držati dugme Shift i kliknuti na drugu. Desnim tasterom miša kliknuti na bilo koju od ove dvije kontrole i izabrati Chains → Create Horizontal Chain1. Između kontrola će se pojaviti simbol koji asocira na lanac i kontrole će se prilagoditi širini ekrana. 27. Selektovati dugme i podesiti desnu marginu na 16 dp (Slika 7).
2628. Selektovati tekst kontrolu. U Attributes prozoru, kliknuti dva puta (ne dvoklik, nego sa pauzom) na indikator širine objekta (unutar Constraints Widget-a), kako bi se podesio na vrijednost Match Constraints (Slika 8). Match constraints znači da će se objekat (u ovom slučaju tekst kontrola) raširiti da popuni prostor koji preostaje kada se odvoji prostor za ostale objekte (u ovom slučaju dugme) i predviđene margine.
27
28Pokrenuti program u emulatoru ili na Android uređaju, kako bi se provjerili rezultati rada
29Pokretanje druge aktivnosti
30Pritiskom na dugme POŠALJI unutar realizovanog korisničkog interfejsa ne dešava se ništa, jer nije napisan kôd koji treba izvršiti kada se pritisne dugme. Sada je potrebno dodati kôd koji će pokrenuti novu aktivnost za ispis poruke, kada se pritisne dugme POŠALJI. 1. Otvoriti fajl MainActivity.java: app > java > com.example.mojprviprojekat > MainActivity. 2. Unutar MainActivity klase definisati metodu posaljiPoruku:
31
32public void posaljiPoruku(View v) { }
33
34Napomena: ukoliko se pojavi greška (Android studio ne može razriješiti klasu View koja se koristi kao argument metode – ključna riječ View je označena crvenom bojom) treba postaviti kursor unutar riječi View i pritisnuti Alt + Enter. U meniju koji će se pojaviti izabrati Import class. 3. Otvoriti activity_main.xml fajl: app > res > layout > activity_main.xml. 4. Selektovati dugme klikom na objekat u editoru. 5. U prozoru Attributes pronaći atribut onClick i izabrati posaljiPoruku [MainActivity] iz padajuće liste. Sada će sistem prilikom svakog pritiska na dugme POŠALJI pozvati metodu posaljiPoruku.
35
36Napomena 2: da bi se neka metoda mogla koristiti za poziv preko atributa onClick, ta metoda mora da bude public void i da ima jedan parametar i to View tipa.
37
38Sada je potrebno napisati kôd za metodu posaljiPoruku kojim će se pročitati sadržaj tekst kontrole i taj sadržaj isporučiti drugoj aktivnosti. U tu svrhu će se koristiti objekat Intent. On omogućava povezivanje između odvojenih komponenti (kao što su dvije aktivnosti) za vrijeme izvršavanja. Radi se zapravo o asinhronim porukama koje omogućavaju komponentama aplikacija da traže funkcionalnost od drugih Android komponenti. Omogućavaju komunikaciju sa komponentama iz istih aplikacija, kao i sa komponentama koje sadrže druge aplikacije. Može se koristiti za razne namjene, ali će se ovdje iskoristiti za pokretanje nove aktivnosti.
39
406. Definisati metodu posaljiPoruku na sljedeći način:
41public static final String EXTRA_PORUKA = "com.example.mojprviprojekat.PORUKA";
42
43public void posaljiPoruku(View v) { Intent i = new Intent(this, PrikaziPoruku.class); EditText editTekst = (EditText) findViewById(R.id.editText); String poruka = editTekst.getText().toString(); i.putExtra(EXTRA_PORUKA, poruka); startActivity(i); } Napomena 3: ukoliko se opet pojave greške (Cannot resolve symbol) treba ih ponovo otkloniti pomoću kombinacije Alt + Enter. Ostaće samo upozorenje na PrikaziPoruku.class, ali to je očekivano jer ta klasa još nije definisana. Intent konstruktor ima dva parametra: tipa Context i tipa Class.
44Context je interfejs sa globalnim informacijama o okruženju aplikacije. Ovo je apstraktna klasa koja omogućava pristup resursima aplikacije i klasama, kao i operacije na nivou aplikacije (pokretanje aktivnosti, emitovanje i prihvatanje Intenta, ...). Klasa tipa Class reprezentuje klase i interfejse u Java aplikaciji. U gornjem primjeru ovaj parametar je zapravo aktivnost kojoj se isporučuje Intent. U string poruka smješta se sadržaj koji je preuzet iz tekst kontrole editText. Metoda putExtra() dodaje sadržaj stringa poruka u Intent. Za identifikaciju se koristi tzv. ključ, koji se navodi kao prvi parametar metode (u gornjem primjeru sadržaj stringa "EXTRA_PORUKA"). Drugi parametar je vrijednost koja se pridružuje ključu. Metoda startActivity() pokreće instancu aktivnosti PrikaziPoruku koja je specificirana u Intent-u. Sljedeći korak je da se kreira klasa PrikaziPoruku, tj. nova aktivnost. 7. U prozoru Project kliknuti desnim tasterom miša na app folder i izabrati New → Activity → Empty Activity. Pojaviće se prozor Configure Activity (Slika 1).
458. U polje Activity Name unijeti PrikaziPoruku i izabrati Finish.
46Android studio će automatski: • kreirati fajl PrikaziPoruku.java; • kreirati layout fajl activity_prikazi_poruku.xml; • dodati <activity> tag u fajl AndroidManifest.xml:
47<activity android:name=".PrikaziPoruku"></activity>
48
49 Ako bi u ovom trenutku startovali aplikaciju, nakon pritiska na dugme POŠALJI pokrenula bi se nova aktivnost (prozor u aplikaciji). Međutim, nova aktivnost bi bila prazna jer je tako definisano u layout fajlu aktivnosti koji je automatski kreiran. Sada treba u novu aktivnost implementirati TextView kontrolu koja će prikazivati poslatu poruku. 9. Otvoriti fajl app > res > layout > activity_prikazi_poruku.xml. 10. Kliknuti na dugme Enable Autoconnection to Parent koje se nalazi na toolbar-u ( ). Na taj način će Autoconnect biti uključen. Dugme sada treba da izgleda ovako: . 11. U panelu Palette izabrati Text, i prevući TextView kontrolu na ekran dizajna negdje blizu vrha i sredine ekrana. Pojaviće se vertikalna linija koja treba da je otprilike po sredini kontrole. Zahvaljujući Autoconnect opciji pojaviće se ograničenja (constraints) sa lijeve i desne strane da bi se kontrola postavila u centar po horizontali. 12. Kreirati i constraint od vrha kontrole do vrha ekrana
5013. Selektovati kontrolu i u Attributes prozoru raširiti atribut textAppearance. Kod atributa textSize izabrati željenu veličinu fonta (npr. 18), a kod atributa textColor boju po želji.
51
52
5314. U klasi PrikaziPoruku, u metodu onCreate() (fajl PrikaziPoruku.java) dodati kôd tako da izgleda ovako:
54public class PrikaziPoruku extends AppCompatActivity {
55
56 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_prikazi_poruku);
57
58 // Prihvati Intent koji je pokrenuo ovu aktivnost i izvući string Intent i2 = getIntent(); String poruka = i2.getStringExtra(MainActivity.EXTRA_PORUKA);
59
60 // Postaviti sadržaj stringa kao tekst kontrole TextView TextView tekst = (TextView)findViewById(R.id.textView); tekst.setText(poruka); } } Napomena 4: ukoliko se opet pojave greške (Cannot resolve symbol) treba ih ponovo otkloniti pomoću kombinacije Alt + Enter.
61Pokrenuti program u emulatoru ili na Android uređaju, kako bi se provjerili rezultati rada.
62
63DODATAK
64Svaki ekran u aplikaciji koji nije početni ekran, treba da ponudi navigaciju koja korisnika usmjerava na roditeljski ekran u hijerarhiji aplikacije. Da bi to učinili kod ekrana koji pripada drugoj aktivnosti u prethodnom primjeru (activity_prikazi_poruku), treba dodati dugme za navigaciju (vraćanje „nazad“) na traci u vrhu prozora.
65Prilikom dodavanja dugmeta za navigaciju treba navesti koja aktivnost je roditeljska, u fajlu AndroidManifest.xml. Otvoriti fajl app > manifests > AndroidManifest.xml, i zamijeniti sadržaj <activity> taga za aktivnost PrikaziPoruku sa sljedećim:
66<activity android:name=".PrikaziPoruku" android:parentActivityName=".MainActivity"> <!-- meta-data tag je potreban za API nivoa 15 i nize --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>
67 Kreiranje korisničkog interfejsa na drugi način (dinamički)
68U ranijim primjerima je pokazano kako se widget-i postavljaju na radni ekran pomoću design editora, odnosno kreiranjem odgovarajućeg XML fajla. Međutim, widget-e je moguće postavljati i dinamički, tokom izvršavanja programa, iz java koda. Za demonstraciju ćemo poći od primjera sa konvertorom između milja i kilometara.
69
701. Otvoriti projekat „Konvertor milje kilometri“. (Ili napraviti novi projekat u koji treba iskopirati sadržaje fajlova MainActivity.java i activity_main.xml iz projekta „Konvertor milje kilometri“). 2. Obrisati donje dugme (button_kmUmilje). Brisanje se može obaviti ili u design editoru ili u xml fajlu. Takođe, u fajlu MainActivity.java obrisati liniju:
71 Button dugmeKonvKmUMilje = (Button) findViewById(R.id.button_kmUmilje); 3. Ovo dugme ćemo kreirati dinamički, iz java koda. Prvo je potrebno deklarisati odgovarajuću promjenljivu:
72 Button dugmeKonvKmUMilje;
734. Potom je potrebno napraviti novu instancu ovog objekta:
74 dugmeKonvKmUMilje = new Button(getApplicationContext());
755. Zatim ćemo podesiti boju teksta na dugmetu:
76 dugmeKonvKmUMilje.setTextColor(Color.BLACK);
776. i boju samog dugmeta:
78 dugmeKonvKmUMilje.setBackgroundColor(Color.parseColor("#ABCDEF"));
797. Tekst na dugmetu se zadaje na sledeći način:
80 dugmeKonvKmUMilje.setText("KOnvertuj km u milje");
818. Da tekst ne bi bio uz same ivice dugmeta, treba dodati malo prostora:
82 dugmeKonvKmUMilje.setPadding(25,0,25,0);
839. Na ovaj način je dugme kreirano, ali još nije vidljivo na ekranu. Potrebno je zadati njegovu poziciju i „dodati“ ga ostalim objektima. Da bi se definisala pozicija na ekranu, mora se prvo zadati ID objektu u okviru kojeg se pozicionira, što je u ovom slučaju ConstraintLayout. Dakle, treba u design editoru selektovati ConstraintLayout i dati mu naziv npr. ConstraintLayout_glavni (Slika 1). 10. Potom se vrši pozicioniranje dugmeta u okviru layout-a:
84 ConstraintLayout glavniEkran = (ConstraintLayout) findViewById(R.id.ConstraintLayout_glavni); // glavniEkran povezujemo sa ConstraintLayout-om ConstraintLayout.LayoutParams parametri = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT ); // zadajemo parametre za ConstraintLayout parametri.topToBottom = dugmeKonvMiljeUKm.getId(); // novo dugme treba da bude ispod starog – njegov vrh ispod dna starog parametri.topMargin = 150; // margina (razmak) između njih // da bi dugme bilo centrirano u okviru layout-a: parametri.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; parametri.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; // dodati dugme sa gore zadatim parametrima glavniEkran.addView(dugmeKonvKmUMilje, parametri);
85Konačan sadržaj fajla MainActivity.java:
86import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout;
87
88import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText;
89
90import java.text.DecimalFormat;
91
92public class MainActivity extends AppCompatActivity { Button dugmeKonvKmUMilje;
93
94 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button dugmeKonvMiljeUKm = (Button) findViewById(R.id.button_miljeUkm); dugmeKonvMiljeUKm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { EditText textBoxMilje = (EditText) findViewById(R.id.editText_Milje); EditText textBoxKm = (EditText) findViewById(R.id.editText_Km); double Milje = Double.valueOf(textBoxMilje.getText().toString()); double Km = Milje / 0.621371192; DecimalFormat formatiranaVrijednost = new DecimalFormat("##.##"); textBoxKm.setText(formatiranaVrijednost.format(Km)); } }); dugmeKonvKmUMilje = new Button(getApplicationContext()); dugmeKonvKmUMilje.setTextColor(Color.BLACK); dugmeKonvKmUMilje.setBackgroundColor(Color.parseColor("#ABCDEF")); dugmeKonvKmUMilje.setText("Konvertuj km u milje"); dugmeKonvKmUMilje.setPadding(25,0,25,0); ConstraintLayout glavniEkran = (ConstraintLayout) findViewById(R.id.ConstraintLayout_glavni); ConstraintLayout.LayoutParams parametri = new ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT ); parametri.topToBottom = dugmeKonvMiljeUKm.getId(); parametri.topMargin = 150; // parametri.leftToLeft = dugmeKonvMiljeUKm.getId();
95 parametri.startToStart = ConstraintLayout.LayoutParams.PARENT_ID; parametri.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID; glavniEkran.addView(dugmeKonvKmUMilje, parametri); dugmeKonvKmUMilje.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { EditText textBoxMilje = (EditText) findViewById(R.id.editText_Milje); EditText textBoxKm = (EditText) findViewById(R.id.editText_Km); double Km = Double.valueOf(textBoxKm.getText().toString()); double Milje = Km * 0.621371192; DecimalFormat formatiranaVrijednost = new DecimalFormat("##.##"); textBoxMilje.setText(formatiranaVrijednost.format(Milje));
96
97 Organizovanje view-a na ekranu koristeći različite layout-e
98Zadatak je da napravimo aplikaciju koja će imati relativno složen sadržaj ekrana sastavljen od većeg broja widget-a, koje treba na određeni način rasporediti. Gornja trećina ekrana treba da bude svjetlo zelene pozadine sa dva dugmeta: jedno malo dugme i drugo veće, koje treba da zauzme polovinu preostalog prostora (po širini) u tom dijelu ekrana. Ispod ovog bloka treba rasporediti 9 dugmadi koja označavaju strane svijeta i nalaze se iznad slike kompasa postavljene u pozadini. Izgled ekrana aplikacije treba da bude kao na slici (Slika 1). 1. Na početnom ekranu (Welcome to Android Studio) izabrati Start a new Android Studio project. Ukoliko je već otvoren neki projekat, izabrati File → New → New Project. 2. U prozoru Choose your project (Slika 2) izabrati Empty Activity i kliknuti na Next
993. Unutar Configure your project prozora (Slika 3) unijeti sljedeće:
100• Name: "Kompas" • Package name: "com.example.kompas" • podesiti lokaciju gdje će projekat biti sačuvan • Language: "Java" • podesiti željeni API nivo. 4. Kliknuti na Finish. 5. Nakon nekog vremena otvoriće se Arduino studio IDE