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

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

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

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

Laboratorium Systemów Mobilnych. Wykład 1

Systemy operacyjne na platformach mobilnych

Podstawowe elementy GUI - zadania

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

akademia androida Intencje oraz URI część III

Obsługa SMS i telefonii

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

[Android] Podstawy programowania

Laboratorium Systemów Mobilnych. Wykład 2

Android pierwsza aplikacja

Systemy operacyjne na platformach mobilnych

Tworzenie dialogów i wykorzystanie klasy Toast

Powiadomienia w systemie Android

Systemy operacyjne na platformach mobilnych

Systemy operacyjne na platformach mobilnych

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

Wykorzystanie plików

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

Podstawowe kontrolki i ich obsługa

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

Mechanizm powiadomień

Mechanizm zapisu preferencji

Systemy operacyjne na platformach mobilnych

Wykorzystanie map i geolokalizacji

Android, wprowadzenie do SDK

Android. Hierarchie widoków i ich wy±wietlanie. Piotr Fulma«ski. March 14, 2016

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

Mariusz Fraś. Instytut Informatyki. olitechnika Wrocławska. Systemy Wbudowane. Android. Dr inż. Mariusz Fraś. maf 1

Mobilne aplikacje multimedialne

Layouty. Kilka layoutów

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:

Podstawowe elementy GUI - zadania

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

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

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

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

akademia androida Http i AsyncTask część VII

SQLite w systemie Android. Własny dostawca treści. Materiał teoretyczny

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

Programowanie obiektowe

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

Szkolenie Android dla początkujących

Fragmenty są wspierane od Androida 1.6

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

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

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

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

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie w Internecie. Java

Agenda. Bazy danych SQLite Zestawienie mapowania w LiteORM Wyświetlanie danych w ListView

Zaawansowane aplikacje WWW - laboratorium

Android poradnik programisty

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

Graficzny interfejs użytkownika

Podstawy i języki programowania

Programowanie dla Androida. Ubiquitous

Aplikacje w środowisku Java

Laboratorium Programowania Kart Elektronicznych

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

ANDROID. OpenGL ES 1.0. Tomasz Dzieniak

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

Dynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz

PARADYGMATY PROGRAMOWANIA Wykład 4

Wykorzystanie fragmentów i tabhost

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

Szybki tutorial o zabezpieczeniach w NFC

Wyświetlanie danych na listach

WSTĘP DO ANDROIDA. Laboratorium

Spis treści. Programowanie aplikacji na platformę Android v 1.0. A.Klusiewicz

Android. Podstawy tworzenia aplikacji. Piotr Fulma«ski. March 4, 2015

Wykład 6 Dziedziczenie cd., pliki

GUI - projektowanie interfejsów

Metody dostępu do danych

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

Wykorzystanie menu i ActionBar

Zaawansowane programowanie UI na platformie Android

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Rysowanie. Rysowanie - podstawy

Android poradnik programisty

Programowanie obiektowe

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

AKADEMIA MŁODYCH ODKRYWCÓW

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Spis treści. Programowanie aplikacji na platformę Android. A.Klusiewicz

Kontenery i komponenty graficzne

Instrukcja obsługi funkcji specjalnych szablonu C01 v.1.0

Near Field Communication

Języki i metody programowania Java Lab2 podejście obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Programowanie urządzeń mobilnych w systemie Android

Programowanie Urządzeń Mobilnych. Laboratorium nr 7, 8

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

Transkrypt:

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

Rozmieszczenie przykład Jaki układu rozmieszczający powinien zostać wykorzystany? AbsoluteLayout, TableLayout, RelativeLayout Jakie są ich wady i zalety

Rozmieszczenie przykład <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="horizontal" > <LinearLayout > <!--... --> </LinearLayout> <Button android:text="w4" android:layout_height="fill_parent"/> </LinearLayout>

Rozmieszczenie przykład <LinearLayout android:layout_weight="1" android:orientation="vertical"> <LinearLayout> <!--... --> </LinearLayout> <Button android:text="w3" android:layout_width="match_parent" /> </LinearLayout>

Rozmieszczenie przykład <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" > <Button android:text="w1" android:layout_weight="1" android:layout_height="match_parent"/> <TableLayout> <!--... --> </TableLayout> <Button android:text="w2" android:layout_weight="1" android:layout_height="match_parent"/> </LinearLayout>

Rozmieszczenie przykład <TableLayout android:layout_weight="3" > <TableRow > </TableRow> <TableRow > </TableRow> </TableLayout>

Rozmieszczenie przykład <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" > <Button android:text="w1" android:layout_weight="1" android:layout_height="match_parent"/> <TableLayout> <!--... --> </TableLayout> <Button android:text="w2" android:layout_weight="1" android:layout_height="match_parent"/> </LinearLayout>

Rozmieszczenie przykład <TableRow > <Button android:text="t11" android:layout_weight="1" /> <Button android:text="t12" android:layout_weight="1" /> </TableRow>

Rozmiary dimension px piksele ekranowe, in cale, mm minimetry, pt - punkty 1/72 cala, dp (dip) punkty na cal (160dp na cal) wielkość uzależniona od upakowania pikseli na ekranie, sp piksele niezależne od skali jednostka do ustawiania rozmiaru czcionek ekranowych, uzależniona od upakowania pikseli oraz ustawień użytkownika

Rozmiary dimension Zawarty w bloku zasobów /res/values, może być umieszczony w dowolnym pliku xml w tym katalogu Służy do zapisu informacji zbiorczej o ramiarzach elementów: <?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="sz_przycisk">200do</dimen> <dimen name="wy_przycisk">100dp</dimen> <dimen name="font_przycisk">25sp</dimen> </resources> <Button android:text="wybierz" android:id="@+id/select" android:layout_width="@dimen/sz_przycisk" android:layout_height="@dimen/wy_przycisk" android:textsize="@dimen/font_przycisk" />

Zasoby kolory Predefiniowany kolor: android:drawable="@color/green" Określenie barwy : #RGB #ARGB : 0 - F #RRGGBB #AARRGGBB : 00 - FF <?xml version="1.0" encoding="utf-8"?> <resources> <color name="darkred">#200000</color> <color name="darkblue">#000020</color> <color name="red">#f00</color> <color name="translucent_red">#80ff0000</color> </resources> <Button android:textcolor="@color/red" android:textcolorhighlight="@color/translucent_red" />

Zasoby wypełniacze Elementy pozwalające rysować elementy w dawnym kolorze (color-drawable) odpowiadające narysowaniu prostokąta w jednym kolorze: <?xml version="1.0" encoding="utf-8"?> <resources> <color name="red">#f00</color> <drawable name="red_rectangle">@color/red</drawable> <drawable name="blue_rectangle">#00f</drawable> </resources> <Button android:background="@drawable/blue_rectangle" />

Zasoby wypełniacze Niezależny obiekt w katalogu /res/drawable Jeden obiekt w danym pliku: nazwa - identyfikator Kształt: "rectangle", "oval", "line", "ring", Pozwala zaokrąglić brzeg rysowanego obszaru: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#80800000" /> <corners android:radius="8dp" /> </shape>

Zasoby wypełniacze Zasób shape pozwala także tworzyć nierównomierne wypełniane obszarów: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:startcolor="#ff00ff00" android:endcolor="#30ff00ff" android:angle="45"/> <corners android:radius="8dp" /> </shape>

Rozmieszczenie przykład

Rozmieszczenie przykład <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent"> <TextView android:text="pozycja:" android:textsize="50sp" /> <TextView android:id="@+id/nrpos" android:layout_width="fill_parent" android:gravity="right" android:textsize="50sp" android:text="1000" /> </LinearLayout> <ListView android:id="@+id/lista" android:background="@drawable/round_rect" android:layout_weight="1" android:layout_margin="10dp" </ListView>

Rozmieszczenie przykład <LinearLayout > <Button android:id="@+id/ok">< android:text="zatwierdź" /> <View android:layout_weight="1" android:layout_height="1px" /> <Button android:id="@+id/cancel" android:text="wycofaj" /> </LinearLayout> </LinearLayout>

Szukanie błędów Debug Wstawianie pułapek: Ctrl+Shift+B (2 x klik na pasek) Run : Debug As : Android Application Powoduje zmianę wyglądy środowiska

Szukanie błędów Debug F5 Step Into wejście do instrukcji złożonej F6 Step Ower następna komenda F7 Step return wyjście z procedury F8 Resume dalsze przetwarzanie programu

Intencje co chcę zrobić Intencją będziemy nazywać akcję oraz powiązane z nią dane Intencje między innym służą do: Wywołania aplikacji z poziomu innej aplikacji. Wywołania wewnętrznych lub zewnętrznych składników aplikacji. Można generować zdarzenia na które inne aplikacje mogą odpowiadać.

Wyświetl moje okno <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent"> <TextView android:layout_margin="20dp" android:layout_width="fill_parent" android:gravity="center_horizontal" android:text="nowe okno"/> </LinearLayout> public class NoweOkno extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.nowe_okno); } }

Wyświetl moje okno <manifest... <application... <activity android:name=".noweokno" android:label="test nowego widoku" android:theme="@android:style/theme.notitlebar.fullscreen"> // pełne okno bez nagłówka <intent-filter> <action android:name="pl.example.intencje.action.noweokno"/> <category android:name="android.intent.category.default"/> </intent-filter> </activity> </application> </manifest>

Wyświetl moje okno <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:layout_gravity="center_horizontal" android:layout_margin="20dp" android:text="otwórz nowe okno" android:onclick="nacisnietoprzycisk" /> </LinearLayout> public class Intencje extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } public void nacisnietoprzycisk(view view) { String url = "pl.example.intencje.action.noweokno"; Intent zamiar = new Intent(url); // Intent zamiar = new Intent(this, NoweOkno.class); startactivity(zamiar); } }

Intencje dostępne w systemie http://developer.android.com/guide/appendix/g app intents.html Przeglądarka stron internetowych Intent openwww = new Intent(Intent.ACTION_VIEW); openwww.setdata(uri.parse("http://www.onet.pl")); startactivity(openwww); startactivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.onet.pl"))); Wyszukiwarka stron startactivity(new Intent(Intent.ACTION_WEB_SEARCH)); Nawiązanie połączenia telefonicznego startactivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:555-555-1234"))); startactivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:555-555-1234"))); <uses-permission android:name="android.permission.call_phone"/>

Intencje przesyłane typy dane Intent putextra(string name, long value) boolean, byte, char, short, int, float, double Intent putextra(string name, long[] value) boolean[], byte[], char[], short[], int[], float[], double[] Intent putextra(string name, String value) Intent putextra(string name, String[] value) Intent putextra(string name, Serializable value) Intent putextra(string name, Bundle value) Intent putintegerarraylistextra(string name, ArrayList<Integer> value) Intent putstringarraylistextra(string name, ArrayList<String> value) Intent putextras(bundle extras)

Intencje przesyłane typy dane String[] getstringarrayextra(string name) ArrayList<String> name) getstringarraylistextra(string String getstringextra(string name) Bundle getextras() double getdouble(string key) long String getlong(string key) getstring(string key) String[] getstringarray(string key)

Intencje a dane <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <EditText android:id="@+id/sendvalue" android:inputtype="numberdecimal" android:text="0" android:layout_width="fill_parent" android:gravity="center_horizontal"/> <Button android:layout_gravity="center_horizontal" android:layout_margin="20dp" android:text="otwórz nowe okno" android:onclick="nacisnietoprzycisk" /> <LinearLayout android:layout_gravity="center_horizontal"> <TextView android:layout_width="fill_parent" android:text="wartość zwrócona:"/> <TextView android:text="0" android:id="@+id/textresult"/> </LinearLayout> </LinearLayout>

Intencje a dane public class Intencje extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); requestwindowfeature(window.feature_no_title); setcontentview(r.layout.main); } public void nacisnietoprzycisk(view view) { EditText et = (EditText) findviewbyid(r.id.sendvalue); double wartosc = Double.parseDouble(et.getText().toString()); Intent zamiar = new Intent(this, NoweOkno.class); zamiar.putextra("typ", "Promień koła"); zamiar.putextra("wartosc", wartosc); startactivityforresult(zamiar, 1); } } //...

Intencje a dane <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical"> <TextView android:layout_margin_top="20dp" android:layout_width="fill_parent" android:gravity="center_horizontal" android:text="nowe okno"/> <TextView android:id="@+id/text" android:layout_margin_top="20dp" android:layout_width="fill_parent" android:gravity="center_horizontal" android:text="przekazane"/> <Button android:id="@+id/close" android:layout_margin_top="20dp" android:layout_gravity="center_horizontal" android:text="zamknij" android:onclick="zamknijokno"/> </LinearLayout>

Intencje a dane public class NoweOkno extends Activity { private double promien; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.nowe_okno); String typ = ""; promien = 0; Bundle b = getintent().getextras(); if (b.containskey("typ")) typ = b.getstring("typ"); if (b.containskey("wartosc")) promien = b.getdouble("wartosc"); TextView tv = (TextView) findviewbyid(r.id.text); tv.settext(typ + " " + promien); } public void zamknijokno(view view) { Intent resultintent = new Intent(); resultintent.putextra("wynik", promien * promien * 3.141562); setresult(result_ok, resultintent); finish(); } }

Intencje a dane public class Intencje extends Activity { //... protected void onactivityresult(int requestcode, int resultcode, Intent data) { super.onactivityresult(requestcode, resultcode, data); if(resultcode == RESULT_OK && requestcode == 1){ if (data.getextras().containskey("wynik")) { TextView tv = (TextView) findviewbyid(r.id.textresult); double msg = data.getextras().getdouble("wynik"); tv.settext(double.tostring(msg)); } } } }

Kontrolki Przyciski obrazkowe Elementy iteracji z użytkownikiem pozwalające wprowadzić obraz zamiast napisu. Udostępnia metodę setimageresource() oraz atrybut android:src Możliwość rozszerzenia funkcjonalności elementu graficznego na skutek zaznaczenia / wciśnięcia przycisku.

Kontrolki Przyciski obrazkowe <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@drawable/back" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:text="@string/hello" android:textsize="30dp" android:textcolor="#000000" android:layout_margin="20dp" /> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:gravity="center_vertical center_horizontal"> <ImageButton android:src="@drawable/one_up" android:layout_height=... android:layout_gravity="center_vertical center_horizontal" /> <ImageButton android:src="@drawable/btn_one" android:layout_height=... android:layout_gravity="center_vertical center_horizontal" /> <ImageButton android:background="@drawable/btn_one" android:layout_height=... android:layout_gravity="center_vertical center_horizontal" /> </LinearLayout> </LinearLayout>

Kontrolki selector android: state_pressed android: state_focused android: state_selected // drawable/btn_one.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android= "http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/one_down" /> <item android:state_focused="true" android:drawable="@drawable/one_down" /> <item android:drawable="@drawable/one_up" /> </selector> android: state_checkable android: state_checked Android: state_enabled android: state_window_focused

Kontrolki przyciski przełączane <ToggleButton android:text="przycisk przełączany" android:layout_width="fill_parent" android:textoff="przycisk włączony" android:texton="przycisk wyłączony" /> void setchecked(boolean checked) boolean ischecked() void settextoff(charsequence textoff) void settexton(charsequence texton)

Kontrolki Zaznaczamy opcje <CheckBox android:layout_width="fill_parent" android:text="opcja 3" android:checked="true" android:button="@drawable/btn_check" /> // drawable/btn_check.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/checkbox1" /> <item android:state_focused="true" android:drawable="@drawable/checkbox1" /> <item android:drawable="@drawable/checkbox2" /> </selector>

Kontrolka wyboru jednej opcji <RadioGroup android:id="@+id/radiogr" > <RadioButton android:id="@+id/opcja1" android:text="opcja 1" /> <RadioButton android:id="@+id/opcja2" android:text="opcja 2" /> <RadioButton android:id="@+id/opcja3" android:text="opcja 3" /> </RadioGroup> interface RadioGroup.OnCheckedChangeListener void oncheckedchanged( RadioGroup group, int checkedid)