4. UŽIVATELSKÉ ROZHRANÍ

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

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

Obsah. Menu. ListView ListActivity Adapter. Ikonkové Rozšířené Submenu Kontextové. BaseAdapter ArrayAdapter CursorAdapter SimpleCursorAdapter 11/29/11

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

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

JAVA. Real-Time Java

JAVA. Real-Time Java

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

JAVA Android Java, letní semestr

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

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

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

ANDROID. Ing. Ladislav Pešička

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

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

Uživatelský manuál aplikace. Dental MAXweb

Administrace webu Postup při práci

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Klient Stagu pro Android

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

První kapitola úvod do problematiky

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

KAPITOLA 7. Widgety nabídek. V této kapitole:

3. ŽIVOTNÍ CYKLUS ACTIVITY

Diplomová práce. Rozvrh hodin pro

Dotyková obrázovká v prográmu TRIFID

MANUÁL PRO REDAKČNÍ SYSTÉM WEBOVÝCH STRÁNEK OBSAH

Internetový přístup do databáze FADN CZ - uživatelská příručka Modul FADN RESEARCH / DATA

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Internetový přístup do databáze FADN CZ - uživatelská příručka Modul FADN BASIC

Jednoduchá evidenční pokladna s EET

15. Projekt Kalkulačka

5. LISTVIEW BI-AND. Programování pro operační systém Android (BI-AND) (c) Autor a garant: M. Havryluk, Spolupráce: M. Balík, O. Kroupa, M.

Dotyková obrázovká v prográmu TRIFID

Projekt Obrázek strana 135

MS Excel Lekce 1. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

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

Nástroje v InDesignu. Panel nástrojů 1. část. Nástroje otevřeme Okna Nástroje

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

01. HODINA. 1.1 Spuštění programu VB Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

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

Dotykova obrazovka v programu TRIFID

Programátorská příručka

PALSTAT s.r.o. systémy řízení jakosti PALSTAT CAQ verze Kontakty 08/ Obsah

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

Práce s programem MPVaK

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

PowerPoint lekce II.

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

Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student.

Spuštění a ukončení databázové aplikace Access

Webové stránky. 4. Tvorba základní HTML webové stránky. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

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

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í.

2017 CARAT "New design"

z aplikace Access 2003

GUI. Systémová integrace pro desktopové aplikace

Semestrální práce 2 znakový strom

František Hudek. březen ročník

HLEDEJCENY.mobi. Obsah. Mobilní verze e-shopu. Důvody instalace

Tvorba fotogalerie v HTML str.1

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem

Podrobný návod pro administraci zákaznických účtů na portálu Czechiatour.eu

Výkresy. Projekt SIPVZ D Modelování v SolidWorks. Autor: ing. Laďka Krejčí

20. Projekt Domácí mediotéka

3 Formuláře a sestavy Příklad 2 Access 2010

11/29/11. (c) Miroslav Balík, Ondřej Kroupa, Martin Pelant. 11. Přednáška. Broadcast receiver Timer Alarmy Widgety

Informační systém Národní soustavy kvalifikací (IS NSK) Návod na obsluhu interního webu - tvorba kvalifikačního a hodnoticího standardu

2 Tvorba interaktivních grafických programů

Konvertor diakritiky 3. Instalace

Excel 2007 praktická práce

Administrace webových stránek

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 4. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

Manuál pro NetDOGs práce s administrací

ZÁPADOČESKÁ UNIVERZITA V PLZNI FAKULTA ELEKTROTECHNICKÁ

Použití prezentací. K heslovitému sdělení informací. Oživení obrázky, schématy, tabulkami, Nevhodné pro dlouhé texty. Doprovodná pomůcka při výkladu

OPERAČNÍ SYSTÉM. základní ovládání. Mgr. Jan Veverka Střední odborná škola sociální obor ošetřovatel

Jazyk C# (seminář 9)

Kontingenční tabulky v MS Excel 2010

Manuál k e-learningovému vzdělávacímu modulu 1 MODUL HIGH-TECH POTRAVINY. Popularizace zdraví Po.Zdrav (CZ.1.07/3.1.00/ )

Word 2007 praktická práce

Studijní skupiny. 1. Spuštění modulu Studijní skupiny

Obsah. při vyšetření pacienta. GDT souboru do programu COSMED Omnia GDT souboru z programu COSMED Omnia a zobrazení výsledků měření v programu MEDICUS

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro administrátory. Verze 1.

Databox CONTACT 6 základní operace programu

Základy práce na PC. Ing. Jan Roubíček

Pracovní prostředí Word 2003 versus Word 2010

WORD. (zobecněno pro verzi 2007)

43 HTML šablony. Záložka Šablony v systému

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

Programování v Javě I. Leden 2008

Úvod do programovacích jazyků (Java)

Strategie ochrany před negativními dopady povodní a erozními jevy přírodě blízkými opatřeními v České republice

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Interaktivní mapy ÚAP Uživatelská příručka

Transkript:

4.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 4. UŽIVATELSKÉ ROZHRANÍ BI-AND

4.3.2013 2 Uživatelské rozhraní Layouty ScrollView Taby ViewFlipper a ViewPager Dialogy Menus

4.3.2013 3 FrameLayout Nejjednodušší a nejzákladnější layout Vlastnosti Nelze nijak pozicovat Všechny View umístěny do levého horního rohu View naskládány na sebe Používané pro speciální/méně časté případy Tvorba menu pomocí animací Obalovací layout

4.3.2013 4 LinearLayout Všechny prvky jsou zarovnávány vertikálně či horizontálně android:orientation=["vertical" "horizontal"] Možnost vnořování do sebe navzájem Nepřehlednost kódu Náročnější na výkon Prvky mohou mít definované layout_weight Určuje, jakým způsobem si prvky rozdělí (zbývající) místo

4.3.2013 5 RelativeLayout Prvky jsou pozicovány relativně proti sobě, např. Prvek B je napravo od prvku A Prvek B je zarovnán nalevo ve svém rodiči Výhody: Přehlednost kódu Méně výpočetně náročné Bezpečnější pozicování (zodpovědnější chování UI) Nevýhody: Každý relativně pozicovaný prvek musí mít android:id Návrh se obtížněji upravuje

4.3.2013 6 Příklady možností pozicování layout_above zadává se ID layout_alignleft zadává se ID Pozor na kruhové závislosti layout_alignparentleft true/false layout_centerhorizontal true/false layout_toleftof - zadává se ID Prvky defaultně pozicovány do levého horního rohu

4.3.2013 7 RelativeLayout - příklad <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/entry" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/entry" android:layout_alignparentright="true" android:text="ok" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toleftof="@id/ok" android:layout_aligntop="@id/ok" android:text="cancel" /> </RelativeLayout>

4.3.2013 8 LinearLayout vs. RelativeLayout LinearLayout Náročná operace layout_weight Obvykle nutné použít více vnořených layoutů Horší orientace v návrhu RelativeLayout Trochu složitější návrh a úprava layoutu Rozdíl znatelný především u ListView a vykreslování více položek

4.3.2013 9

4.3.2013 10 TableLayout - příklad <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchcolumns="1"> <TableRow> <TextView android:padding="3dip" android:text="open"/> <TextView android:text="ctrl-o" </TableRow> android:gravity="right" android:padding="3dip" /> Nepoužívat k pozicování! <TableRow> <TextView android:text="save as... " android:padding="3dip" /> <TextView android:text="ctrl-shift-s" </TableRow> </TableLayout> Nelze nastavit layout width u řádků android:gravity="right" android:padding="3dip" />

4.3.2013 11 GridLayout Prvky rozděleny do mřížky Lze použít prvek prázdné místo Lze určovat šířku buňky Rozdíl mezi GridLayout a GridView Určuje se počet sloupců a řádků Není možné určovat váhy Dostupné od API Level 14 Součástí Compatibility Library v7

4.3.2013 12 ScrollView Umožňuje scrollování, pokud velikost vnořených prvků přesahuje fyzickou velikost displeje Pouze jeden vnořený element Neobalovat ListView do ScrollView! <ScrollView xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="fill_parent"> <LinearLayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical"> <Button android:text="button" android:layout_width="wrap_content" android:layout_height="wrap_content" />... <Button android:text="button" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </ScrollView>

4.3.2013 13 Taby Umožňují vložení více Activit nebo Views do jedné obrazovky a přepínání mezi nimi pomocí tabů Existují 2 možné implementace: Přepínání activit V každém tabu běží normální nezávislá Activita Neaktivní activity se chovají úplně stejně jako běžné activity na pozadí (při nedostatku paměti je systém může ukončit) Přepínání Views Přepnutím tabu ze pouze změní View v aktuální aktivitě Tyto 2 metody je možné kombinovat TabActivity je deprecated!

4.3.2013 14 Taby TabActivity je již deprecated Taby se nyní přidávají většinou do ActionBaru Nahrazení TabActivity přímo TabHost s TabWidget za použití TabManageru Pro přepínání se používají fragmenty (nutnost přidat Compatibility Library pro starší zařízení) Více v 12. přednášce

4.3.2013 15 ViewFlipper Widget pro rychlé přepínání mezi jednotlivými obrazovkami Vhodné např. pro tvorbu průvodců <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ViewFlipper android:id="@+id/viewflipper01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <include layout="@layout/screen1" /> <include layout="@layout/screen2" /> <include layout="@layout/screen3" /> </ViewFlipper> Jednotlivé obrazovky průvodce umístíme do zvláštních souborů ve složce layout

4.3.2013 16 ViewFlipper - pokračování <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:background="@drawable/bottom_bar" android:gravity="center_vertical"> <Button android:layout_width="100dp" android:layout_height="wrap_content" android:id="@+id/button02" android:layout_alignparentright="true" android:text="next" /> <Button android:layout_height="wrap_content" android:layout_width="100dp" android:id="@+id/button01" android:text="previous" android:layout_alignparentleft="true" /> </RelativeLayout> </RelativeLayout> Vytvoříme wizard-like dolní lištu pomocí RelativeLayout Pozadí nebudeme referencovat na to, co je v systému, a raději si ho zkopírujeme do své aplikace např. ze složky sdk/platforms/android-10

4.3.2013 17 ViewFlipper - pokračování Následujícím způsobem vytvoříme jednotlivé obrazovky průvodce a pojmenujeme screen[1-3].xml Pozn.: <merge> není nutné použít a obsah obrazovek průvodce můžeme rovnou psát do <ViewFlipper> <?xml version="1.0" encoding="utf-8"?> <merge </merge> xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="flipper Content 1" /> Merge je náhradou za root XML element

4.3.2013 18 ViewFlipper pokračování public class ViewFlipperExample extends Activity implements OnClickListener { private Button next; private Button previous; private ViewFlipper vf; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); vf = (ViewFlipper) findviewbyid(r.id.viewflipper01); previous = (Button) findviewbyid(r.id.button01); next = (Button) findviewbyid(r.id.button02); next.setonclicklistener(this); previous.setonclicklistener(this); } @Override public void onclick(view v) { if (v == next) { vf.shownext(); } if (v == previous) { vf.showprevious(); } }}

4.3.2013 19 ViewPager

4.3.2013 20 ViewPager Jednoduchý XML element Samotná logika se řeší v kódu pomocí PagerAdapter PagerAdapter se stará o: Vytvoření a přidání nového View Odstranění View Lze přepsat i další metody přechodu Nutné přidat Compatibility Library pro starší zařízení

4.3.2013 21 Hierarchy Viewer Nástroj z SDK pro zobrazení TreeView Vhodné pro optimalizaci layoutů a jejich porovnání Časy vykreslení (od verze 2.3) Zobrazení okrajů prvků layoutu a jejich property Možnost uložit strom nebo celý náhled Lze prozkoumat i cizí layouty (pouze na emulátoru)

4.3.2013 22 Hierarchy Viewer

4.3.2013 23 Dialogy Předání (důležité) informace uživateli Získání informace od uživatele Vytvářeny v překryté metodě oncreatedialog() Přístup a nastavení z hlavního vlákna protected Dialog oncreatedialog(int id) { Dialog dialog; switch(id) { case DIALOG_PAUSED_ID: break; case DIALOG_GAMEOVER_ID: break; default: dialog = null; } return dialog; } showdialog(dialog_paused_id);

4.3.2013 24 Operace s dialogy dismissdialog() Zavře dialog cancel() Stejné jako dismissdialog() a navíc zavolá DialogInterface.OnCancelListener removedialog(int) Pouze při použití oncreatedialog(int) Zruší referenci na dialog a zavolá dismissdialog(), pokud se zobrazuje Nastavení listenerů přes DialogInterface OnDismissListener OnCancelListener Zavolán při zrušení dialogu uživatelem nebo při stisku Back

4.3.2013 25 AlertDialog Velice jednoduchá implementace Lze nastavit titulek, obsah zprávy, maximálně tři tlačítka, položky výběru (CheckBox, RadioButton) AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setmessage("are you sure you want to exit?").setcancelable(false).setpositivebutton("yes", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int id) { MyActivity.this.finish(); } }).setnegativebutton("no", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create();

4.3.2013 26 Další možnosti AlertDialogu Se seznamem S RadioButtony

4.3.2013 27 Vlastní vzhled dialogu 1. Vytvoříme si xml s vlastním vzhledem: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginright="10dp /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="fill_parent" android:textcolor="#fff"/> </LinearLayout>

4.3.2013 28 Vlastní vzhled dialogu - pokračování Context mcontext = getapplicationcontext(); Dialog dialog = new Dialog(mContext); dialog.setcontentview(r.layout.custom_dialog); dialog.settitle("custom Dialog"); TextView text = (TextView) dialog.findviewbyid(r.id.text); text.settext("hello, this is a custom dialog!"); ImageView image = (ImageView) dialog.findviewbyid(r.id.image); image.setimageresource(r.drawable.android);

4.3.2013 29 LayoutInflater Třída slouží k vytváření instancí XML souborů do odpovídajících View objektů Nikdy nepoužívat přímo. Vždy volat: getlayoutinflater() getsystemservice(string) Každý View XML soubor má odpovídající Java class Nelze zatím použít s XmlPullParser na plain XML během runtime (XML musí být předzpracovano během built-time) AlertDialog.Builder builder = new AlertDialog.Builder(this);.setView(getLayoutInflater().inflate(R.layout.custom_dialog, null)).create(); AlertDialog.Builder nelze použít setcontentview()

4.3.2013 30 Další dialogy ProgressDialog 9. přednáška DatePickerDialog TimePickerDialog

4.3.2013 31 Menu Rychlý přistup k funkcím aplikace bez obětování cenného prostoru na obrazovce Každá activita může mít vlastní menu Vyvolání pomocí tlačítka menu Options menu vs. Context menu Změna filozofie menu od Android 3.0+ Menu podporují submenu, checkboxy, radio buttony, klávesové zkratky a ikonky Připevnění kontextového menu k libovolnému View

4.3.2013 32 Options menu Maximální počet ikon se liší podle zařízení Objeví se na spodní straně obrazovky po stisknutí tlačítka menu Pro omezený počet položek (většinou 6) zobrazí ikonku a text Zbytek se schová do Více Nezobrazuje checkboxy, radio buttony ani klávesové zkratky Styl vytváření ikon viz. 5. přednáška

4.3.2013 33 Rozšířené menu Volba Více v menu Scrollovatelný seznam zbylých položek, Zobrazují se checkboxy, radio buttony, plná délka popisku Nezobrazují se ikony Nelze vynutit zobrazení rozšířeného menu

4.3.2013 34 Submenu Zobrazí se po kliknutí na položku obsahující v sobě další menu Jméno položky se objeví v titulku dialogu Nelze vložit submenu do submenu Stejné chování pro zobrazení položek jako u rozšířeného menu

4.3.2013 35 Options menu Zavolání metody oncreateoptionsmenu při stisku menu tlačítka Jako parametr obdržíme Menu, do kterého přidáme položky Můžeme použít MenuInflater a naplnit menu položkami z XML(res/menu/main_menu.xml) a/nebo je přidat ručně 1. @Override 2. public boolean oncreateoptionsmenu(menu menu) { 3. //naplnění menu z res/menu/main_menu.xml 4. MenuInflater inflater = getmenuinflater(); 5. inflater.inflate(r.menu.main_menu, menu); 6. //ruční přidání položky 7. int groupid = Menu.NONE;//skupina pro rozlišení radiogroup 8. int itemid = 10;//ID položky pro onoptionsitemselected 9. int order = Menu.NONE;//pořadí položky v menu 10. menu.add(groupid, itemid, order, "Položka").setIcon(R.drawable.icon); 11. //ruční odebraní položky 12. menu.removeitem(10); 13. return super.oncreateoptionsmenu(menu); 14. } Vytvoření pomocí XML nebo v kódu

4.3.2013 36 Options menu main_menu.xml 1. <?xml version="1.0" encoding="utf-8"?> 2. <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3. <!-- Normální položka s ikonou --> 4. <item android:id="@+id/item1" 5. android:title="normální položka" 6. android:icon="@drawable/icon" /> 7. <!-- Checkbox --> 8. <item android:checkable="true" 9. android:id="@+id/groupitem1" 10. android:title="checkbox" /> 11. <!-- Skupina radio buttonu --> 12. <group android:checkablebehavior="single"> 13. <item android:id="@+id/radio1" 14. android:title="radio button 1" /> 15. <item android:id="@+id/radio1" 16. android:title="radio button 2" /> 17. </group> 18. <!-- Submenu --> 19. <item android:id="@+id/submenu" 20. android:title="submenu"> 21. <menu> 22. <item android:id="@+id/submenuitem11" 23. android:title="položka submenu" /> 24. 25. </menu> 26. </item> 27.</menu>

4.3.2013 37 Options menu Po vybrání položky z menu se zavolá metoda onoptionsitemselected, která dostane v atributu vybranou položku - MenuItem 1. @Override 2. public boolean onoptionsitemselected(menuitem item) { 3. switch (item.getitemid()) { 4. case R.id.item1: 5.... 6. break; 7. case R.id.radio1: 8.... 9. break; 10. case R.id.submenuItem11: 11.... 12. break; 13. } 14. return super.onoptionsitemselected(item); 15. } ID v XML vs. ID v add()

4.3.2013 38 Options menu Metoda oncreateoptionsmenu se zavolá pouze před prvním vytvořením menu Pokud potřebujeme menu dynamicky měnit, je třeba tak činit v onprepareoptionsmenu, které se zavolá před každým vysunutím menu Při zavírání menu se volá onoptionsmenuclosed

4.3.2013 39 Context menu Zobrazeno po dlouhém podržení daného View nebo zavoláním View.createContextMenu(menu) Lze změnit i na libovolnou jinou akci Podobné jako Submenu Dané View se musí zaregistrovat na použití kontextového menu pomocí registerforcontextmenu(view); Lze tedy mít více kontextových menu v jedné activitě

4.3.2013 40 Context menu Pro zobrazení menu je třeba přepsat metodu oncreatecontextmenu(contextmenu, View, ContextMenuInfo) Implementace podobná jako u oncreateoptionsmenu(menu); Atribut View View, které uživatel vybral oncreatecontextmenu() voláno pokaždé Atribut ContextMenuInfo podrobnosti o kontextovém menu Pro provedení akce po výběru položky z menu je třeba přepsat oncontextitemselected(menuitem); Stejné jako onoptionsitemselected(menuitem); Pozor na unikátní ID u každé položky, pokud je více kontextových menu

4.3.2013 41 Context menu příklad 1. @Override 2. protected void oncreate(bundle savedinstancestate) { 3.... 4. registerforcontextmenu(view); 5.... 6. } 1. @Override 2. public void oncreatecontextmenu(contextmenu menu, View v 3., ContextMenuInfo menuinfo) { 4. MenuInflater inflater = getmenuinflater(); 5. inflater.inflate(r.menu.context_menu, menu); 6. super.oncreatecontextmenu(menu, v, menuinfo); 7. } 1. @Override 2. public boolean oncontextitemselected(menuitem item) { 3. switch (item.getitemid()) { 4. case R.id.new_game: 5. newgame(); 6. return true; 7. default: 8. return super.oncontextitemselected(item); 9. } 10. }

4.3.2013 42 Další zdroje http://developer.android.com/resources/articles/layouttricks-merge.html http://androiddevelopers.blogspot.com/2011/08/horizontal-viewswiping-with-viewpager.html http://developer.android.com/guide/topics/ui/layout/relative.html