Tworzenie dialogów i wykorzystanie klasy Toast

Podobne dokumenty
[Android] Podstawy programowania

Mechanizm powiadomień

Wykorzystanie plików

Systemy operacyjne na platformach mobilnych

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 7 Wykorzystanie układu LinearLayout

Podstawowe elementy GUI - zadania

Mechanizm zapisu preferencji

Programowanie urządzeń mobilnych. dr inż. Juliusz Mikoda

AndroidManifest.xml. Plik manifestu opisuje podstawowe charakterystyki aplikacji i definiuje jej komponenty.

Powiadomienia w systemie Android

Android pierwsza aplikacja

Programowanie urządzeń mobilnych w systemie Android. Ćwiczenie 8 Wykorzystanie układu RelativeLayout

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Wykorzystanie fragmentów i tabhost

Wyświetlanie danych na listach

Fragmenty są wspierane od Androida 1.6

Laboratorium Systemów Mobilnych. Wykład 1

Aktywności są związane z ekranem i definiują jego wygląd. Dzieje się to poprzez podpięcie do aktywności odpowiedniego widoku.

JAVA : TELEFONY KOMÓRKOWE I ANDROID 1. WSTĘP

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Laboratorium Systemów Mobilnych. Wykład 2

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University.

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Dynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz

Szybciej (pisać) Łatwiej (czytać) Prościej (utrzymywać) Marcin Wąsowski Amsterdam Standard Sp. z o.o.

Tworzenie wydajnych interfejsów. Autorzy: Piotr Michałkiewicz, 2 rok AiR Daniel Maksymow, 2 rok Informatyki

Podstawowe kontrolki i ich obsługa

Obsługa SMS i telefonii

Wyświetlanie danych na listach

Zdarzenia Klasa Application Powiadomienia Toast AlertDialog

Podstawowe elementy GUI - zadania

Warsztaty v2 Layout y i widget y. Tomasz Wachowski Kamil Snopek Jan Romaniak

Visual Studio instalacja

Graficzny interfejs użytkownika

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Mobilne aplikacje multimedialne

Wykorzystanie menu i ActionBar

akademia androida Składowanie danych część VI

Wykorzystanie map i geolokalizacji

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

I. Usługi. Usługa może przyjąć dwie formy:

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie Urządzeń Mobilnych. Laboratorium nr 9,10

Dodanie nowej formy do projektu polega na:

Laboratorium 8 ( Android -pierwsza aplikacja)

dr Artur Bartoszewski dr Artur Bartoszewski - Aplikacje mobilne - Wykład

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

Agenda. Activity cd Layouty Jednostki Dialogi LogCat Drugie Activity i Intents Serializacja Własne widoki Menu

akademia androida Http i AsyncTask część VII

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Kurs programowania 2 - listy

Systemy operacyjne na platformach mobilnych

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Systemy operacyjne na platformach mobilnych

Zaawansowane programowanie UI na platformie Android

Ćwiczenie 6 Proste aplikacje - podstawowe komponenty.

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

I. Wstawianie rysunków

grafika 2D i animacja obsługa rotacji i elementy 3D-OpenGL w Androidzie

Życie aktywności Nawigując przez aplikacje poszczególne Aktywności przechodzą pomiędzy stanami. Dla przykładu gdy aktywność uruchamia się po raz

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 1

akademia androida Intencje oraz URI część III

Języki i metody programowania Java. Wykład 2 (część 2)

Laboratorium 10 - Web Services

Kurs WWW. Paweł Rajba.

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

STWORZENIE PRZYKŁADOWEJ

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Zaawansowane aplikacje WWW - laboratorium

Programowanie obiektowe

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

Programowanie Obiektowe GUI

Programowanie obiektowe

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager

WSTĘP DO ANDROIDA. Laboratorium 1 Systemy i aplikacje bez granic

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Dokumentacja do API Javy.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Aplikacje WWW - laboratorium

PHP 5 język obiektowy

Layouty. Kilka layoutów

WSTĘP DO ANDROIDA. Laboratorium

Wywoływanie metod zdalnych

Systemy operacyjne na platformach mobilnych

Aplikacje internetowe i rozproszone - laboratorium

Programowanie obiektowe

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Programowanie w JAVA Lab. 5 - Wątki. 1. Wykorzystując metodę Monte Carlo narysować wykres funkcji oraz obliczyć całkę: 7 x ) xy, 8,8

protected void onsaveinstancestate(bundle outstate); protected void onrestoreinstancestate(bundle savedinstancestate);

Aplikacje w środowisku Java

Enkapsulacja, dziedziczenie, polimorfizm

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wsparcie dla różnych urządzeń. SDK pozwala przystosować aplikację do większości tych wypadków

Aplikacje RMI Lab4

Laboratorium 9 (Więcej Aktywności, w Androidzie)

Architektury usług internetowych. Laboratorium 5. JADE

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Transkrypt:

Tworzenie dialogów i wykorzystanie klasy Toast

Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Victor Matos, Cleveland State University. Portions of this page are reproduced from work created and shared by Google and used according to terms

Wykorzystanie Dialogów Android umożliwia tworzenie dwóch typów dialogów: 1. Wykorzystując klasę AlertDialog. 2. Wykorzystując klasę Toast Toast to transparentny dialog wyświetlający na kilka sekund zadaną informację. Znika bez udziału użytkownika. 2

AlertDialog AlertDialog posiada następujące właściwości: (1) Wyświetla małe okno pływające, znajdujące się nad aktualnym widokiem. (2) Prezentuje użytkownikowi komunikat wraz z trzema opcjonalnymi przyciskami. (3) Dialog jest zamykany poprzez kliknięcie danego przycisku bądź dotknięcie obszaru poza dialogiem. Uwaga: Dialog tego typu nie jest dialogiem modalnym! 3

AlertDialog Struktura AlertDialog: Ikona Tytuł Komunikat: Przycisk Negative Przycisk Neutral Przycisk Positive Rysunek wykorzystuje: Theme_Holo_Light_Dialog oraz STYLE_NORMAL 4

Przykład 1. AlertDialog AlertDialog Widok aplikacji składa się z trzecich przycisków. Po kliknięciu na dany przycisk, określony typ AlertDialog jest wyświetlany. 1. Po kliknięciu pierwszego przycisku wyświetlany jest standardowy AlertDialog z 3 przyciskami. 2. Drugi wybór to własna implementacja dialogu, w którym użytkownik może wprowadzić dane. 3. Ostatnia opcja wykorzystuje koncepcję fragmentów. 5

Przykład 1. AlertDialog AlertDialog Q Terminator Are you sure that you want to quit? NO Cancel Yes Custom Dialog Title U;; I Message line 1 Message line2 Dismiss: Back btn, Close, or touch outside Enter some data here... Close et Title - DialogBox Message Line 1 Message Line 2 Negative Neutral Positive Prosty AlertDialog z trzema opcjami. Własny AlertDialog do wprowadzania danych. Fragment z trzema opcjami. 6

Przykład 1. Struktura aplikacji AlertDialog 1 1. Klasa MainActivity prezentuje listę opcji oraz umożliwia osadzenie obiektów klasy DialogFragment. 2 2. Zasoby aplikacji zawierają również zestaw ikon wyświetlanych na oknach dialogowych. 3. Plik XML custom_dialog_layout.xml prezentuje widok dla własnej implementacji dialogu. 3 7

8 AlertDialog Przykład 1. Układ XML activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/linearlayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="7dp" > <TextView android:id="@+id/txtmsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#55ffff00" android:text="dialogbox Demo" /> <Button android:id="@+id/btn_alert_dialog1" android:layout_width="190dp" android:layout_height="wrap_content" android:text="alert Dialog Box" /> <Button android:id="@+id/btn_custom_dialog" android:layout_width="190dp" android:layout_height="wrap_content" android:text="custom Dialog Box" /> <Button android:id="@+id/btn_alert_dialog2" android:layout_width="190dp" android:layout_height="wrap_content" android:text="alert Dialog Fragment" /> </LinearLayout>

AlertDialog Przykład 1. Układ XML custom_dialog_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="5dp" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/sd_textview1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="textview" /> </LinearLayout> 9

AlertDialog Przykład 1. Układ XML custom_dialog_layout.xml <EditText android:id="@+id/sd_edittext1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="50dp" android:ems="15" android:hint="enter some data here..." > <requestfocus /> </EditText> <Button android:id="@+id/sd_btnclose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="close" /> </LinearLayout> 10

Przykład 1. MainActivity.java AlertDialog // example adapted from: // http://developer.android.com/reference/android/app/dialogfragment.html public class MainActivity extends Activity implements OnClickListener { TextView txtmsg; Button btncustomdialog; Button btnalertdialog; Button btndialogfragment; Context activitycontext; String msg = ""; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); activitycontext = this; 1 txtmsg = (TextView) findviewbyid(r.id.txtmsg); btnalertdialog = (Button) findviewbyid(r.id.btn_alert_dialog1); btncustomdialog = (Button) findviewbyid(r.id.btn_custom_dialog); btndialogfragment = (Button) findviewbyid(r.id.btn_alert_dialog2); btncustomdialog.setonclicklistener(this); btnalertdialog.setonclicklistener(this); btndialogfragment.setonclicklistener(this); } 11

AlertDialog Przykład 1. MainActivity.java 2 3 @Override public void onclick(view v) { if (v.getid() == btnalertdialog.getid()) { showmyalertdialog(this); } if (v.getid() == btncustomdialog.getid()) { showcustomdialogbox(); } if (v.getid() == btndialogfragment.getid()) { showmyalertdialogfragment(this); } }// onclick private void showmyalertdialog(mainactivity mainactivity) { new AlertDialog.Builder(mainActivity).setTitle("Terminator").setMessage("Are you sure that you want to quit?").seticon(r.drawable.ic_menu_end_conversation) // set three option buttons.setpositivebutton("yes", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { // actions serving "YES" button go here msg = "YES " + Integer.toString(whichButton); txtmsg.settext(msg); } })// setpositivebutton 12

Przykład 1. MainActivity.java AlertDialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { // actions serving "CANCEL" button go here msg = "CANCEL " + Integer.toString(whichButton); txtmsg.settext(msg); }// OnClick })// setneutralbutton.setnegativebutton("no", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { // actions serving "NO" button go here msg = "NO " + Integer.toString(whichButton); txtmsg.settext(msg); } })// setnegativebutton.create().show(); }// showmyalertdialog 13

Przykład 1. MainActivity.java AlertDialog private void showcustomdialogbox() { final Dialog customdialog = new Dialog(activityContext); customdialog.settitle("custom Dialog Title"); 4 // match customdialog with custom dialog layout customdialog.setcontentview(r.layout.custom_dialog_layout); ((TextView) customdialog.findviewbyid(r.id.sd_textview1)).settext("\nmessage line1\nmessage line2\n" +"Dismiss: Back btn, Close, or touch outside"); final EditText sd_txtinputdata = (EditText) customdialog.findviewbyid(r.id.sd_edittext1); ((Button) customdialog.findviewbyid(r.id.sd_btnclose)).setonclicklistener(new OnClickListener() { @Override public void onclick(view v) { txtmsg.settext(sd_txtinputdata.gettext().tostring()); customdialog.dismiss(); } }); customdialog.show(); } 14

Przykład 1. MainActivity.java AlertDialog private void showmyalertdialogfragment(mainactivity mainactivity) { 5 DialogFragment dialogfragment = MyAlertDialogFragment.newInstance(R.string.title); dialogfragment.show(getfragmentmanager(), "TAG_MYDIALOGFRAGMENT1"); } 6 public void dopositiveclick(date time) { txtmsg.settext("positive - DialogFragment picked @ " + time); } public void donegativeclick(date time) { txtmsg.settext("negative - DialogFragment picked @ " + time); } public void doneutralclick(date time) { txtmsg.settext("neutral - DialogFragment picked @ " + time); } } 15

Przykład 1. MainActivity.java AlertDialog Komentarz 1, 2. Główny interfejs prezentuje 3 przyciski do wyświetlenia odpowiedniego typu dialogu. 3. Metoda showmyalertdialog używa tzw. mechanizm builder by stworzyć nowy AlertDialog dodając do niego tytuł, ikonę, komunikat oraz trzy przyciski. Każdy przycisk ma przypisaną indywidualną metodę onclick() odpowiedzialną za określoną reakcję. 4. Własny dialog wykorzystuje metodę.setcontentview(r.layout.custom_dialog_layout) by ustawić odpowiedni widok. Jego przycisk do zamknięcia ma ustawiony nasłuchiwacz by przesłać wprowadzony tekst do głównej aktywności i zamknąć dialog. 5. W tym kroku obiekt DialogFragment jest tworzony. W konstruktorze podawany jest m. in. jego tytuł. Dialog prezentowany jest ponad aktualnie prezentowany widok. 6. Odwołania zwrotne pod postacią metod dopositive(), donegative() itp umożliwiają fragmentowi DialogFragment przekazywanie danych do głównej aktywności. 16

Przykład 1. AlertDialog MyAlertDialogFragment.java public class MyAlertDialogFragment extends DialogFragment { 1 public static MyAlertDialogFragment newinstance(int title) { MyAlertDialogFragment frag = new MyAlertDialogFragment(); Bundle args = new Bundle(); args.putint("title", title); args.putstring("message", "Message Line 1\nMessage Line 2"); args.putint("icon", R.drawable.ic_happy_plus); } frag.setarguments(args); return frag; 2 @Override public Dialog oncreatedialog(bundle savedinstancestate) { int title = getarguments().getint("title"); int icon = getarguments().getint("icon"); String message = getarguments().getstring("message"); return new AlertDialog.Builder(getActivity()).setIcon(icon).setTitle(title).setMessage(message) 17 17

18 Przykład 1. AlertDialog MyAlertDialogFragment.java 3.setPositiveButton("Positive", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { ((MainActivity) getactivity()).dopositiveclick(new Date()); } }).setnegativebutton("negative", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { ((MainActivity) getactivity()).donegativeclick(new Date()); } }).setneutralbutton("neutral", new DialogInterface.OnClickListener() { public void onclick(dialoginterface dialog, int whichbutton) { ((MainActivity) getactivity()).doneutralclick(new Date()); } }).create(); } } 18

AlertDialog Przykład 1. MyAlertDialogFragment.java Komentarz 1. Klasa rozszerza DialogFragment. Metoda odpowiedzialna za jego tworzenie wymaga podania tytułu, komunikatu oraz ikony. Podane argumenty są zapamiętywane w strukturze typu Bundle. 2. Metoda oncreatedialog pobiera przekazane dane (tytuł, ikona, komunikat) ze struktury typu Bundle. Mechanizm builder jest wykorzystywany by stworzyć okno dialogowe. 3. Trzy przyciski dodawane są do obiektu DialogFragment. Każdy posiada nasłuchiwacza, który aktywowany wywołuje odpowiednią metodę zwrotną z aktywności MainActivity. Przekazywana jest aktualna data i czas. 19

Toast Obiekty typu Toast stanowią najprostszy mechanizm generowania komunikatów. Zwykle używane są w sytuacji, gdy krótka wiadomość powinna zostać wyświetlona użytkownikowi. Komunikat wizualizowany jest jako pół-przeźroczysty, pływający dialog, wyświetlany nad aktualnym widokiem. Jego czas życia to 2-4 sekundy. Toast nigdy nie uzyskuje focus a! 29

Toast Przykład 2. Składnia polecenia maketext Toast.makeText ( context, message, duration ).show(); Context: Referencja do kontekstu aktualnego widoku bądź aplikacji. Message: Duration: Komunikat do wyświetlenia. Toast.LENGTH_SHORT (0) to ok. 2sec Toast.LENGTH_ LONG (1) to ok. 3.5 sec Klasa Toast posiada tylko kilka metod wpływające na położenie komunikatu: maketext, show, setgravity oraz setmargin. 21

Toast Przykład 2. Prosty Toast public class MainActivity extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } } Toast.makeText( getapplicationcontext(), "Saludos amigos \n Hasta la vista", Toast.LENGTH_LONG).show(); Przekazanie kontekstu można zrealizować na kilka sposobów: getapplicationcontext(), MainActivity.this, lub this. 22

Toast Przykład 3. Zmiana pozycji komunikatu Domyślnie komunikaty typu Toast są prezentowane jako wycentrowane na dole ekranu. Jednakże można wpłynąć na pozycję komunikatu wykorzystując następujące metody: void setgravity (int gravity, int xoffset, int yoffset) void setmargin (float horizontalmargin, float verticalmargin) 23

Toast Przykład 3. Zmiana pozycji komunikatu void setgravity (int gravity, int xoffset, int yoffset) ( Przy założeniu rozdzielczości ekranu 480x800) gravity: Ogólne położenie. Przykładowe wartości: Gravity.CENTER, Gravity.TOP, Gravity.BOTTOM, itp. xoffset: Przesunięcie poziome -240,,0, 240 left, center, right yoffset: Przesunięcie pionowe -400,,0, 400 top, center, bottom

Toast Przykład 3. Zmiana pozycji komunikatu Punkt (0,0) środek ekranu to miejsce gdzie pionowe i poziome linie na rysunku się krzyżują. Ekran jest dzielony po 50% względem środka Marginesy są wyrażane jako wartości procentowe: -50,, 0,, 50. void setmargin (float horizontalmargin, float verticalmargin) Uwaga! Para marginesów: (-50, -50) reprezentuje lewy-dolny róg ekranu, ( 0, 0) to jego środek, natomiast (50, 50) to prawy górny róg.

Toast Example 3. Re-positioning a Toast View X offset: X offset: X offset: 240 Y offset: 400 Y offset: 0 Y offset: -400 Show Toast Show Toast 26

Toast Przykład 3. Układ XML: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/txtcaption" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ff009999" android:gravity="center" android:text="positioning a Toast" android:textsize="20sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" > <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:text=" X offset: " android:textsize="18sp" /> <EditText android:id="@+id/txtxcoordinate 27

Toast Przykład 3. Układ XML: activity_main.xml android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" android:inputtype="numbersigned" android:text="0" android:textsize="18sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" > <TextView android:layout_width="100dp" android:layout_height="wrap_content" android:text=" Y offset: " android:textsize="18sp" /> <EditText android:id="@+id/txtycoordinate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" android:inputtype="numbersigned" android:text="0" android:textsize="18sp" /> </LinearLayout> 28

Toast Przykład 3. Układ XML: activity_main.xml <Button android:id="@+id/btnshowtoast" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_gravity="center" android:text=" Show Toast " > </Button> </LinearLayout> 29

Toast Przykład 3. MainActivity: ToastDemo3.java public class ToastDemo3 extends Activity { EditText txtxcoordinate; EditText txtycoordinate; TextView txtcaption; Button btnshowtoast; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activty_main); 1 2 // bind GUI and Java controls txtcaption = (TextView) findviewbyid(r.id.txtcaption); txtxcoordinate = (EditText) findviewbyid(r.id.txtxcoordinate); txtycoordinate = (EditText) findviewbyid(r.id.txtycoordinate); btnshowtoast = (Button) findviewbyid(r.id.btnshowtoast); // find screen-size and density(dpi) int dpi = Resources.getSystem().getDisplayMetrics().densityDpi; int width= Resources.getSystem().getDisplayMetrics().widthPixels; int height = Resources.getSystem().getDisplayMetrics().heightPixels; txtcaption.append("\n Screen size= " + width + "x" + height +" Density=" + dpi + "dpi"); 30

Toast Przykład 3. MainActivity: ToastDemo3.java 3 // show toast centered around selected X,Y coordinates btnshowtoast.setonclicklistener(new OnClickListener() { @Override public void onclick(view v) { try { Toast mytoast = Toast.makeText(getApplicationContext(), "Here", Toast.LENGTH_LONG); mytoast.setgravity( Gravity.CENTER, Integer.valueOf(txtXCoordinate.getText().toString()), Integer.valueOf(txtYCoordinate.getText().toString())); mytoast.show(); } }); } catch (Exception e) { Toast.makeText(getApplicationContext(), e.getmessage(), Toast.LENGTH_LONG).show(); } }// oncreate }// class 31

Toast Przykład 3. Komentarz MainActivity: ToastDemo3.java 1. Obiekty GUI są wiązane z określonymi komponentami Java. Po kliknięciu przycisku komunikat typu Toast jest prezentowany. 2. Wywołanie Resources.getSystem().getDisplayMetrics() wykorzystywane jest by określić wielkość ekranu (wysokość, szerokość) w pikselach, jak również gęstość upakowania pikseli. 3. Instancja klasy Toast jest tworzona przy użyciu metody maketext. Wywołanie metody setgravity jest wykorzystywane by wskazać współrzędne (X,Y) gdzie komunikat typu Toast ma zostać wyświetlony. Współrzędne X i Y odwołują się do położenia rzeczywistych pikseli na ekranie urządzenia. 32

Toast Przykład 4. A Custom-Made Toast View Komunikaty typu Toast mogą zostać zmodyfikowane by wyświetlić dowolną kombinację kolorów, kształtów, tekstu, rysunków oraz tła. By stworzyć własny komunikat typu Toast: 1. Zdefiniuj układ XML jaki ma zostać zaaplikowany do własnego obiektu Toast. 2. Prócz etykiety TextView reprezentującej dany komunikat, inne elementy GUI mogą zostać zastosowane. 3. Dokonaj inflacji widoku XML. Dołącz nowy widok do obiektu typu Toast za pomocą metody setview(). Przykład bazuje na: http://hustleplay.wordpress.com/2009/07/23/replicating-default-android-toast/ http://developer.android.com/guide/topics/ui/notifiers/toasts.html 33

Toast Przykład 4. Układ XML - activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/linearlayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Butatnodnroid:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="showcustomtoast" android:text="show Custom Toast" android:layout_gravity="center" tools:context=".toastdemo4" /> </LinearLayout> 34

Toast 35 Przykład 4. Układ XML - custom_toast.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@layout/my_shape" android:orientation="horizontal" android:padding="8dp" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginright="8dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/toast_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="a message goes here..." android:textcolor="#ffffffff" android:textsize="20sp" /> </LinearLayout>

Toast Przykład 4. Układ XML - my_shape.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <stroke android:width="2dp" android:color="#ffffff00" /> <solid android:color="#ff990000" /> <padding android:bottom="4dp" android:left="10dp" android:right="10dp" android:top="4dp" /> <corners android:radius="15dp" /> </shape> Uwaga: Shape to element typu drawable jak prostokąt czy owal. Wykorzystuje atrybuty jak stroke (obramowanie), solid (wewnętrzna część kształtu), narożniki, marginesy itp. Plik znajduje się w katalogu res/layout. 36

Toast Przykład 4. MainActivity - ToastDemo4.java public class ToastDemo4 extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); }//oncreate public void showcustomtoast(view v){ // ///////////////////////////////////////////////// // this fragment creates a custom Toast showing // image + text + shaped_background // triggered by XML button's android:onclick=... } Toast customtoast = makecustomtoast(this); customtoast.show(); 37

Toast Przykład 4. MainActivity - ToastDemo4.java 1 protected Toast makecustomtoast(context context) { // Reference: // http://developer.android.com/guide/topics/ui/notifiers/toasts.html LayoutInflater inflater = getlayoutinflater(); View layout = inflater.inflate( R.layout.custom_toast, null); TextView text = (TextView) layout.findviewbyid(r.id.toast_text); text.settext("this is a custom toast"); 2 3 Toast toast = new Toast(context); toast.setmargin(50,-50); //lower-right corner toast.setduration(toast.length_long); toast.setview(layout); return toast; }//makecustomtoast }//ToastDemo2 38

Toast Przykład 4. MainActivity - ToastDemo4.java Komentarz 1. Po procesie inflacji układu XML, pobierana jest referencja do etykiety TextView która przechowuje komunikat do wyświetlenia. 2. Obiekt typu toast jest pozycjonowany przy użyciu metod setmargin() do dolnego-lewego rogu ekranu (50, -50). 3. Stworzony widok podpinany jest do obiektu typu Toast poprzez metodę.setview(). 39

Tworzenie dialogów i wykorzystanie klasy Toast 40

Dialogi DODATEK A. Shape W pliku XML definiuje figurę geometryczną. Dokumentacja: http://developer.android.com/reference/andr oid/graphics/drawable/shapes/shape.html http://developer.android.com/guide/topics/r esources/drawable-resource.html#shape http://developer.android.com/reference/andr oid/graphics/drawable/shapedrawable.html <?xml version="1.0" encoding="utf-8"?> <Shape xmlns:android="http://schemas.android.com/apk/res/androi d" android:shape=["rectangle" "oval" "line" "ring"] > <corners android:radius="integer" android:topleftradius="integer" android:toprightradius="integer" android:bottomleftradius="integer" android:bottomrightradius="integer" /> <gradient android:angle="integer" android:centerx="integer" android:centery="integer" android:centercolor="integer" android:endcolor="color" android:gradientradius="integer" android:startcolor="color" android:type=["linear" "radial" "sweep"] android:uselevel=["true" "false"] /> <padding android:left="integer" android:top="integer" android:right="integer" android:bottom="integer" /> <size android:width="integer" android:height="integer" /> <solid android:color="color" /> <stroke android:width="integer" android:color="color" android:dashwidth="integer" android:dashgap="integer" /> 41 </shape>