5. přednáška. Stylování a themování Themování Android Interface Definition Language Data Sdílení dat 11/29/11

Podobné dokumenty
7. STYLOVÁNÍ A SDÍLENÍ DAT

Začínáme s vývojem pro Android

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

typová konverze typová inference

KMI / TMA Tvorba mobilních aplikací. 6. seminář ZS 2016/2017 Středa 13:15-15:45

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

Úvod do programovacích jazyků (Java)

Java a XML. 10/26/09 1/7 Java a XML

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Android projekt. Manifest. Activity. Uživatelské rozhraní (základy)

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

UJO Framework. revoluční architektura beans. verze

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Obsah. Životní cyklus activity Context Intent Spouštění aktivit Interakce s uživatelem. Toast. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Abstraktní datové typy: zásobník

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

20. Projekt Domácí mediotéka

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Android 100% Java telefon. Petr Musil

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Teoretické minimum z PJV

JAVA. Další jazyky kompilovatelné do Java byte-code

Principy objektově orientovaného programování

3. ŽIVOTNÍ CYKLUS ACTIVITY

Generické programování

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Algoritmizace a programování

Programování v C++ 2, 4. cvičení

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

1. Programování proti rozhraní

Android za hranicemi Hello World

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

8 Třídy, objekty, metody, předávání argumentů metod

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

Jazyk C# (seminář 3)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Práce na pozadí. Služby. Notifikace

Iterator & for cyklus

7. Datové typy v Javě

Seminář Java II p.1/43

Úvod do programovacích jazyků (Java)

Jazyk C# (seminář 6)

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Seminář Java IV p.1/38

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Java Výjimky Java, zimní semestr

Uživatelské rozhraní. Layouty FrameLayout LinearLayout RelativeLayout TableLayout ScrollView Taby Dialogy ViewFlipper 11/29/11

Návrhové vzory Design Patterns

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Výčtový typ strana 67

ADT/ADS = abstraktní datové typy / struktury

Čipové karty Lekařská informatika

První kapitola úvod do problematiky

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

JAVA Android Java, letní semestr

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

Vytváření a použití knihoven tříd

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Úvod do programování - Java. Cvičení č.4

Abstraktní třída a rozhraní

Java - řazení objektů

Java - výjimky. private void vstup() throws IOException {... }

PREPROCESOR POKRAČOVÁNÍ

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

boolean hasnext() Object next() void remove() Kolekce

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

11/29/11. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant. 12. Přednáška. Zjišťování polohy Google Mapy OverlayItem Zálohování.

IRAE 07/08 Přednáška č. 1

KTE / ZPE Informační technologie

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Příklad zobrazení toastu s vlastním designem

Datové struktury. alg12 1

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Vývoj multiplatformní aplikace v Qt

Objektové programování

Zápis programu v jazyce C#

Tvorba informačních systémů

návrhový vzor Singleton.

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

RMI - Distribuované objekty v Javě

Typický prvek kolekce pro české řazení

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Komponenty v.net. Obsah přednášky

Návrhové vzory OMO, LS 2014/2015

Úvod do programování v jazyce Java

1. Téma 12 - Textové soubory a výjimky

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Transkript:

5. přednáška Stylování a themování Themování Android Interface Definition Language Data Sdílení dat 2

3 Stylování a themování vzhledu aplikace Styl Sbírka vlastností, která specifikuje vzhled a formát View či window <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textcolor="#00ff00" android:typeface="monospace" android:text="@string/hello" /> <TextView style="@style/codefont" android:text="@string/hello" /> Theme Styl aplikovaný na aktivitu či celou aplikaci Vlastnosti layout_width, layout_height, textcolor a typeface je možné přesunout do vlastního stylu CodeFont

4 Definování stylu Vytvoříme xml soubor ve složce res/values Kořenový tag musí být <resources> Zvolíme název a případně rodiče stylu, od kterého se má dědit Zadefinujeme vlastní hodnoty k příslušným názvům vlastností <?xml version="1.0" encoding="utf-8"?> <resources> <style name="codefont parent="@android:style/textappearance.medium"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textcolor">#00ff00</item> <item name="android:typeface">monospace</item> </style> </resources>

Dědičnost stylů Styly je možné od sebe dědit, např. takto: <style name="greentext" parent="@android:style/textappearance"> <item name="android:textcolor">#00ff00</item> </style> <style name="codefont.red"> <item name="android:textcolor">#ff0000</item> </style> <style name="codefont.red.big"> <item name="android:textsize">30sp</item> </style> 5

Themování příklad <?xml version="1.0" encoding="utf-8"?> <resources> <style name="theme" parent="android:theme"></style> <style name="theme.translucent"> <item name="android:windowbackground"> @drawable/translucent_background</item> <item name="android:windownotitle">true</item> <item name="android:colorforeground">#fff</item> </style> <style name="theme.transparent"> <item name="android:windowbackground"> @drawable/transparent_background</item> <item name="android:windownotitle">true</item> <item name="android:colorforeground">#fff</item> </style> <style name="textappearance.theme.plaintext" parent="android:textappearance.theme"> <item name="android:textstyle">normal</item> </style> </resources> 6

7 Android Interface Definition Language (AIDL) Umožňuje definovat programové rozhraní přes které komunikuje klient a služba za použití meziprocesové komunikace (Interprocess Communication - IPC) V Androidu proces nemůže sdílet paměť s jiným procesem Proto spolu procesy komunikují pomocí IPC Objekty musí být rozloženy na primitiva, s nimiž systém umí pracovat

Data Persistentní (trvalá) Data musejí být dostupná vždy (i po restartu aplikace) Nepersistentní (netrvalá) Data potřebná v jedné instanci aplikace 8

Možnosti sdílení persistentních data Sdílené nastavení (SharedPreferences) Soubory Databáze Content provider 9

10 Sdílené nastavení android.content.sharedpreferences Třída pro ukládání a načítání trvalých párů klíč-hodnota Uložení jakéhokoli primitivního typu boolean, float, int, long, String Data se uchovávají v XML Umístění: /data/data/<jméno aplikace>/shared_prefs/ Příklad XML s uloženými SharedPreferences: 1. <?xml version='1.0' encoding='utf-8' standalone='yes'?> 2. <map> 3. <long name="longkey" value="1" /> 4. <boolean name="booleankey" value="false" /> 5. <string name="stringkey">text</string> 6. </map>

11 Sdílené nastavení Instanci můžeme získat těmito metodami: PreferenceManager.getDefaultSharedPreferences(Con text); Vrátí výchozí SharedPreferences společné pro všechny komponenty aplikace Context.getSharedPreferences(name, mode); Vrátí SharedPreferences identifikované parametrem name Oprávnění můžeme určit parametrem mode MODE_PRIVATE MODE_WORLD_WRITEABLE MODE_WORLD_READABLE Activity.getPreferences(mode); Vráti SharedPreferences unikátní pro danou aktivitu Alternativa k volání metody getsharedpreferences se jménem třídy v prvním parametru

12 Sdílené nastavení ukládání dat K editování a následnému uložení se používá SharedPreferences.Editor Instance se získá zavoláním edit na SharedPreferences Samotné uložení se provede příkazem commit 1. 2. 3. 4. 5. 6. 7. 8. SharedPreferences sp =getpreferences(mode_private); Editor ed = sp.edit(); ed.putstring("klic", "hodnota"); ed.putfloat("lastfloat", 1f); ed.putint("wholenumber", 2); ed.putlong("anumber", 3l); ed.putboolean("istrue", true); ed.commit();

13 Sdílené nastavení načítání dat Pro každý typ, který může být v SharedPreferences uložen, existuje getter, který přijímá 2 parametry: klíč defaultní hodnotu, která se vrátí, pokud záznam s daným klíčem neexistuje Pro zjištění, jestli hodnota s daným klíčem existuje, se může použít metoda SharedPreferences.contains(key); 1. SharedPreferences sp = getpreferences(mode_private); 2. String text = sp.getstring("text", ""); 3. int number = sp.getint("wholenumber", 0); 4. float lastfloat = sp.getfloat("lastfloat", 0f); 5. long anumber = sp.getlong("anumber", 0); 6. boolean istrue = sp.getboolean("istrue", false);

14 Možnosti sdílení nepersistentních dat Intent Třída android.app.application Veřejná statická proměnná nebo metoda Singleton objekt Služba (android.app.service) Systém ji může automaticky zabít pouze v extrémních situacích Vhodná pouze pro zpracování déle trvajících operací, např. Přehrávání Stahování dat z internetu Bundle Data jsou ztracena po ukončení aplikace

15 Sdílení dat přes Intent putextra(klíč, hodnota) Klíč String Hodnota Primitivní datové typy Objekty implementující java.io.serializable Většina objektů Java a Android knihovny mají již implementováno Rychlé na implementaci android.os.parcelable Může být rychlejší Časové náročnější na implementaci Data je možné poslat i activitě, která běžící activitu spustila startactivityforresult (Intent intent, int requestcode)

16 Posílání dat přes Intent - příklad ActivityA.java Intent intent = new Intent(getApplicationContext(), ActivityB.class); intent.putextra("cz.cvut.fit.secret", "hello world"); startactivity(intent); ActivityB.java Bundle extras = getintent().getextras(); if (extras!= null) { String string = extras.getstring("cz.cvut.fit.secret");

Parcelable - příklad public class ParcelableData implements Parcelable private Date date; private String message; private double value; public Date getdate() { return date; public String getdetails() { return message; public double getmagnitude() { return value; public ParcelableData(Date date, String message, double value) { this.date = date; this.message = message; this.value = value; 17

18 Parcelable pokračování příkladu Data zapíšeme do kontejneru Parcel public void writetoparcel(parcel out, int flags) { out.writelong(date.gettime()); out.writestring(message); out.writedouble(value); Data vytvoříme z kontejneru Parcel private ParcelableData(Parcel in) { date = new Date(); date.settime(in.readlong()); message = in.readstring(); value = in.readdouble();

19 Parcelable pokračování příkladu Generátor instance ParcelableData public static final Parcelable.Creator<ParcelableData> CREATOR = new Parcelable.Creator<ParcelableData>() { public ParcelableData createfromparcel(parcel in) { return new ParcelableData(in); public ParcelableData[] newarray(int size) { return new ParcelableData[size]; ; public int describecontents() { return 0;

Sdílení pomocí Application Výhody Komplexní kontrola nad správou životního cyklu dat Přehledná inicializace a destrukce zdrojů Centralizovaný přístup, kam může získat přístup kterákoli Activita či Service Nevýhoda Data jsou dostupná pouze v rámci aplikace 20

21 Sdílení pomocí Application příklad Do AndroidManifest.xml k elementu <application> je nutno přidat android:name=".globalstate" Sdílený objekt s potřebnými proměnnými a metodami public class GlobalState extends Application { private String text; public String gettext() { return text; public void settext(string testme) { this.text = testme; Přístup ke sdílenému objektu GlobalState globalstate = (GlobalState) getapplication();

Singleton Velmi podobné sdílení přes Application Vlastní a obtížnější kontrola životního cyklu dat Obtížnější pro testování (unit test) 22

23 Singleton - příklad public class SingletonObject { private static SingletonObject instance = null; private String text; public static SingletonObject getinstance() { if (instance == null) { instance = new SingletonObject(); return instance; public void settext(string text) { this.text = text; public String gettext() { return text; SingletonObject.getInstance().setText("hello world");