7. STYLOVÁNÍ A SDÍLENÍ DAT

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

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

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

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

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

Programování v Javě I. Leden 2008

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

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

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

typová konverze typová inference

UJO Framework. revoluční architektura beans. verze

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

3. ŽIVOTNÍ CYKLUS ACTIVITY

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

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

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

Úvod do programovacích jazyků (Java)

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

1. Programování proti rozhraní

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

20. Projekt Domácí mediotéka

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

Android 100% Java telefon. Petr Musil

Abstraktní datové typy: zásobník

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

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

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

KMI / TMA Tvorba mobilních aplikací

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

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

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

Výčtový typ strana 67

Algoritmizace a programování

KMI / TMA. Tvorba mobilních aplikací. 3. seminář ZS 2017/2018 ČTVRTEK 13:15-15:45

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

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

ADT/ADS = abstraktní datové typy / struktury

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

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

Teoretické minimum z PJV

Programátorská příručka

Jazyk C# (seminář 3)

Android za hranicemi Hello World

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

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

PREPROCESOR POKRAČOVÁNÍ

První kapitola úvod do problematiky

Seminář Java IV p.1/38

JAVA Android Java, letní semestr

Dědění, polymorfismus

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

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Generické programování

Jazyk C# (seminář 6)

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

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

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

Seminář Java II p.1/43

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.

Obsah. LayoutInflater. UI model KeyEvent View Tvorba vlastních komponent Canvas Matrix Vlastní EditText

Principy objektově orientovaného programování

Vláknové programování část V

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

Java - řazení objektů

Vlákno odlehčený proces kód vlákna, zásobník privátní ostatní sdíleno s dalšími vlákny téhož procesu

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

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

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

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

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

Vývoj multiplatformní aplikace v Qt

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

Úvod do programovacích jazyků (Java)

Dědičnost (inheritance)

Objektové programování

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

RMI - Distribuované objekty v Javě

Abstraktní třída a rozhraní

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

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

Zápis programu v jazyce C#

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

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

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

Integrace OpenOffice.org a Javy. CZJUG, , Robert Vojta

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Čipové karty Lekařská informatika

Návrhové vzory Design Patterns

Návrhové vzory OMO, LS 2014/2015

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

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

Java Enum Java, zimní semestr ,2017 1

Java Výjimky Java, zimní semestr

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

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

Obsah. Úvod 11. Vytvoření emulátoru 20 Vytvoření emulátoru platformy Android 4.4 Wearable 22 Spouštění aplikací na reálném zařízení 23

JAVA JavaBeans Java, letní semestr

Transkript:

25.3.2013 1 Programování pro operační systém Android (BI-AND) (c) Autor a garant: M. Havryluk, Spolupráce: M. Balík, O. Kroupa, M. Pelant 7. STYLOVÁNÍ A SDÍLENÍ DAT BI-AND

25.3.2013 2 7. přednáška Stylování Themování 9-patch Sdílení dat Shared Preferences Android Interface Definition Language

25.3.2013 3 Vzhled aplikace Každý výrobce má většinou vlastní uživatelské prostředí Nahrazení stock/nativního vzhledu widgetů a dalších prvků TouchWiz, HTC Sense, Timescape, atd. Není možné se spolehnout na přítomnost nativních prvků Holo Theme přítomné ve všech zařízení s Androidem 4.0+ Obtížné přizpůsobení vzhledu aplikace Vytvořit vlastní vzhled widgetů, dialogů a dalších prvků Nelze snadno poznat, jaká úprava UI je použita Používat prvky z Holo Theme nebo starší nativní prvky Úprava vzhledu bývá většinou velmi náročná

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

25.3.2013 5 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 Nadefinujeme vlastní hodnoty k příslušným názvům vlastností ADT plugin pro Eclipse podporuje extrahování stylu <?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>

25.3.2013 6 Vlastnosti stylů Styl může být použitý na Widget Container Vždy však ovlivní pouze prvek, na který je použit Např. styl RedText použitý na LinearLayout neovlivní potomka TextView Atributy je možné najít např. Android Javadoc pod XML Attributes Inherited XML Attributes R.attr Android ignoruje neplatné styly Není vyvolána žádná compile-time ani run-time výjimka

25.3.2013 7 Dědičnost stylů Chceme konkrétního rodiče (např. Theme.Holo) s částečně jinými vlastnostmi Přidáme nebo změníme požadované vlastnosti U zbývajících vlastností jsou použity vlastnosti rodiče Používá se atribut parent nebo tečková notace <style name="greentext parent="@android:style/textappearance" > <item name="android:textcolor">#00ff00</item> </style> <style name="mytext.green > <item name="android:textcolor">#00ff00</item> </style> Rozdíl?

25.3.2013 8 Themování příklad <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> Theme použít u <activity> nebo <application>

25.3.2013 9 Druhy atributů Typy atributů (format) string fraction enum flag reference (na jiný resource) color boolean dimension float integer Lze volit více druhů současně Vlastní jsou definovány pomocí <declare-styleable> (name + format) Důležité pro vytváření vlastních widgetů Více v 11. přednášce

25.3.2013 10 Používání atributu reference Pokud použití stylů přímo v XML layoutu nechceme být vázáni na konkrétní styl, ale styl použitý až podle daného theme Ve složce values vytvořit soubor attrs.xml <attr name="texttitle format="reference > Atribut se vyhodnotí až v run-time Danou referenci použít v XML layoutu pomocí?název Nastavit hodnoty (konkrétní styly) pro atributy v daných themes

25.3.2013 11 Používání atributů Obdobně lze použít atributy i v jiném formátu (např. integer) a použít pro změnu drawable (např. src u Button) Lze používat i atributy přímo z operačního systému <ProgressBar style="?android:attr/progressbarstylehorizontal > Bude použit styl, který je vázán na aktuální theme dané verze OS

25.3.2013 12 Draw 9-patch (draw9patch) WYSIWYG editor pro tvorbu 9-patch 9-patch drawable PNG obrázek Má tzv.,,patche v nich se obrázek roztahuje a škáluje Vhodné pro různé velikosti obrazovek pro Pozadí tlačítek Rámečky Mnohé další prvky Další druhy Drawables na 11. přednášce

25.3.2013 13 Ukázka 9-patch pro EditText Je počet patches minimální?

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

25.3.2013 15 Možnosti sdílení persistentních data Soubory Databáze Content Provider Shared Preferences

25.3.2013 16 Shared Preferences 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>

25.3.2013 17 Shared Preferences Instanci můžeme získat několika metodami PreferenceManager. getdefaultsharedpreferences(context); Vrátí výchozí SharedPreferences společné pro všechny komponenty aplikace Context.getSharedPreferences(name, mode); Vrátí SharedPreferences identifikované parametrem name

25.3.2013 18 Shared Preferences Activity.getPreferences(mode); Vrátí SharedPreferences unikátní pro danou aktivitu Alternativa k volání metody getsharedpreferences se jménem třídy v prvním parametru Oprávnění můžeme určit parametrem mode MODE_PRIVATE MODE_WORLD_WRITEABLE MODE_WORLD_READABLE Přístup z jiné aplikace pomocí 1. createpackagecontext("cz.cvut.and", 0);

25.3.2013 19 Shared Preferences 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. SharedPreferences sp =getpreferences(mode_private); 2. Editor ed = sp.edit(); 3. ed.putstring("klic", "hodnota"); 4. ed.putfloat("lastfloat", 1f); 5. ed.putint("wholenumber", 2); 6. ed.putlong("anumber", 3l); 7. ed.putboolean("istrue", true); 8. ed.commit(); apply() vs commit()

25.3.2013 20 Shared Preferences načítání dat Pro každý typ, který může být v SharedPreferences uložen, existuje getter, který přijímá dva 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);

25.3.2013 21 Možnosti sdílení nepersistentních dat Intent Třída android.app.application Veřejná statická proměnná nebo metoda Singleton object Service (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í Bundle Data jsou ztracena po ukončení aplikace

25.3.2013 22 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 Rychlejší zpracování Časové náročnější na implementaci Data je možné poslat activitě, která běžící activitu spustila startactivityforresult(intent intent, int requestcode)

25.3.2013 23 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"); }

25.3.2013 24 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; }

25.3.2013 25 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(); }

25.3.2013 26 Parcelable pokračování příkladu 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]; } }; Použito např. pro potomky třídy public int describecontents() { return 0; } Generátor instance ParcelableData

25.3.2013 27 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 jakákoliv Activita či Service Nevýhoda Data jsou dostupná pouze v rámci aplikace

25.3.2013 28 Sdílení pomocí Application 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() { Použití vlastní třídy Application return text; } public void settext(string testme) { this.text = testme; } } Přístup ke sdílenému objektu GlobalState globalstate = (GlobalState) getapplication();

25.3.2013 29 Singleton Velmi podobné sdílení přes Application Vlastní a obtížnější kontrola životního cyklu dat Obtížnější pro testování Používat nejenom jako úschovnu dat

25.3.2013 30 Singleton - příklad public class SingletonObject { private static SingletonObject instance = null; private String text; public static synchronized 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");

25.3.2013 31 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) Nástavba IPC je právě AIDL Usnadňuje práci s nízko úrovňovým protokolem V Androidu proces nemůže sdílet paměť s jiným procesem Objekty musí být rozloženy na jednoduché datové typy (příp. Parcelable), s nimiž systém umí pracovat Nutné vytvořit interface (.aidl), který bude určovat dostupné služby a zde popsat signaturu metod

25.3.2013 32 Android Interface Definition Language (AIDL) AIDL umí pracovat s: Všemi primitivními datovými typy v Javě String a CharSequence List vždy použit/vrácen ArrayList Map - vždy použit/vrácen HashMap List a Map může obsahovat pouze ostatní datové typy podporované AIDL Postup implementace: 1. Vytvořit.aidl s definicí interface 2. Implementovat daný interface v Javě 3. Implementovat Service pro předání Binderu

25.3.2013 33 Další zdroje http://ofps.oreilly.com/titles/9781449390501/aidl.html http://android10.org/index.php/articlesother/279-draw-9- patch-tutorial