Android School 01

Android School 01

Prezentacja z warsztatu 01 Szkoły Androida.

Podstawy tworzenia aplikacji, zapoznanie ze środowiskiem Eclipse i narzędziami pomocniczymi. Konfiguracja emulatora, przedstawienie kluczowych elementów interfejsu użytkownika, układy widoków, reakcja na podstawowe zdarzenia. Cykl życia aktywności, sposoby komunikacji pomiędzy składnikami aplikacji, intencje.

Kod źródłowy z przykładową aplikacją: http://jodlowski.net

572884b36b9538ad273ef7dd7e23b228?s=128

Adam Jodłowski

March 16, 2013
Tweet

Transcript

  1. 2.

    2 Android w 5 minut • każda aplikacja działa w

    swoim własnym procesie, we własnej instancji maszyny wirtualnej Dalvik • dostęp do zasobów sprzętowych i operacji systemowych jest ograniczany przez mechanizm uprawnień • kod piszemy najczęściej w języku Java, korzystając z funkcji udostępnianych przez API Androida oraz SDK • mamy dostęp do większości bibliotek J2SE • funkcje specyficzne dla Androida są realizowane przez biblioteki systemowe i dostawców zewnętrznych • konfiguracja i zarządzanie zasobami są oparte o XML
  2. 3.

    3 Narzędzia • oficjalnie wspieranym IDE jest Eclipse, dedykowana wtyczka

    została zintegrowana w dystrybucję o nazwie ADT Bundle zawierającą kompletny zestaw narzędzi • Dalvik Debug Monitor Server (DDMS) stanowi narzędzie kontrolne i diagnostyczne aplikacji • do naszej dyspozycji jest sporo kreatorów i narzędzi pomocniczych, w tym edytor GUI, profiler, kreator ikon aplikacji i najważniejszy – emulator systemu • dowolne kombinacje ustawień emulatorów pozwalają na przetestowanie aplikacji na różnych urządzeniach, nie posiadając ich fizycznych odpowiedników
  3. 5.

    5 Zasoby statyczne • zasoby składowe projektu są umieszczane w

    odpowiednio nazwanych katalogach, co pozwala na automatyczne dobieranie różnych wersji w zależności od potrzeb, zasoby są organizowane w pliku R /res/drawable (grafiki) /res/layout (układy widoków) /res/menu (układy menu) /res/values (wartości – kolory, wymiary, łańcuchy znaków, style) /res/anim (deklaratywne opisy animacji) /res/xml (dodatkowa konfiguracja komponentów) • dla kompatybilności ze wszystkimi typami urządzeń, należy dostarczyć różne wersje tych samych zasobów grafiki w /res/drawable-ldpi, -mdpi, -hdpi i -xdpi układy widoków w /res/layout-land i -port • internacjonalizacja na podstawie kwalifikatorów zasobów /res/values-pl, -ja, -de, ...
  4. 6.

    6 Reakcje na zdarzenia interfejsu • każdy element interfejsu, do

    którego chcemy pobrać uchwyt, musi mieć nadany identyfikator ID android:id="@+id/my_button" • uzyskanie referencji do widoku i rejestracja obiektu nasłuchującego (listenera) Button b = (Button) findViewById(R.id.my_button); b.setOnClickListener(new OnClickListener(...)); • podstawowym narzędziem logowania jest klasa android.util.Log, przyjmująca tzw. tag i wiadomość Log.e(tag, msg) - błędy, Log.w(...) - ostrzeżenia, Log.i(...) - informacje, Log.d(...) - debug, Log.v(...) - verbose
  5. 7.

    7 Widoki i ich właściwości, układy widoków • podstawowe komponenty

    interfejsu użytkownika TextView, Button, CheckBox, EditText, Spinner, ... • konfiguracja programowa lub za pomocą XML pozwala na zmianę właściwości komponentu, najczęściej wyglądu android:layout_width android:layout_height android:color android:textSize android:inputType android:padding android:layout_margin android:text android:src • układy widoków służą pozycjonowaniu komponentów interfejsu użytkownika względem siebie LinearLayout, TableLayout, FrameLayout, RelativeLayout, GridLayout, ...
  6. 8.

    8 Pozycjonowanie w LinearLayout <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:gravity="center_vertical" >

    <Button android:layout_weight="1" android:layout_width="0dp" android:layout_height="wrap_content" android:text="Button 1" /> <Button android:layout_weight="2" android:layout_width="0dp" android:layout_height="wrap_content" android:text="Button 2" /> </LinearLayout>
  7. 9.

    9 Pozycjonowanie w RelativeLayout <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/imie_i_nazwisko"

    android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/zatwierdz" android:layout_below="@id/imie_i_nazwisko" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Zatwierdz" /> <Button android:layout_toLeftOf="@id/zatwierdz" android:layout_alignBaseline="@id/zatwierdz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Anuluj" /> </RelativeLayout>
  8. 10.

    10 Zapoznaj się z widokami EditText (z filtrem treści) i

    Button, wyświetl wpisany tekst na konsoli na naciśnięcie przycisku. Poeksperymentuj z układami widoków, użyj przynajmniej LinearLayout i RelativeLayout, zwróć uwagę na właściwości gravity vs layout_gravity, layout_width/height/weight oraz przeglądnij właściwości pozycjonowania widoków wewnątrz RelativeLayout.
  9. 11.

    11 Aktywność • pojedyńczy ekran składowy aplikacji widoczny na pierwszym

    planie podczas interakcji z użytkownikiem • pełni rolę okna lub strony internetowej znanych ze środowiska komputerów osobistych • najważniejsze trzy metody zwrotne onCreate(Bundle) - tworzenie aktywności onResume() - wznawianie onPause() - wstrzymywanie • istnienie aktywności regulowane jest przez jej cykl życia
  10. 12.

    12

  11. 13.

    13 AndroidManifest.xml • plik konfiguracyjny całej aplikacji, zawiera m.in. nazwę

    głównego pakietu wersję kodu aplikacji docelowe wersje platformy wymagane uprawienia wymagane biblioteki współdzielone deklaracje wszystkich komponentów składowych
  12. 14.

    14 Zarządzanie aktywnościami, intencje • każda aktywność musi być zadeklarowana

    w manifeście • intencje stanowią metodę komunikacji pomiędzy komponentami aplikacji Intent intent = new Intent(kontekst, klasa); np.: new Intent(this, Aktywnosc.class); • uruchomienie jednej aktywności za pomocą drugiej startActivity(intent); • metoda finish() kończy pracę aktywności • intencje mogą zawierać w sobie proste dane intent.putExtra("etykieta", wartosc); • odczytujemy je w nowej aktywności z obiektu intencji, która ją wystartowała getIntent().getIntExtra("etykieta", -1);
  13. 15.

    15 Rezultat wykonania • możemy wystartować aktywność z zamiarem otrzymania

    od niej rezultatu przetwarzania startActivityForResult(intent, REQUEST_CODE); • aktywność wywoływana musi ustawić rezultat operacji oraz spowodować własne zakończenie setResult(RESULT_CODE); finish(); • może też przekazać wraz z odpowiedzią pewne proste dane setResult(RESULT_CODE, intent); • rezultat odbieramy w metodzie zwrotnej aktywności wywołującej onActivityResult(int requestCode, int resultCode, Intent data);
  14. 16.

    16 W przykładowej aplikacji dodaj drugą aktywność, przejdź pomiędzy nimi

    za pomocą intencji, sprawdź zmiany w cyklu życia wypisując wiadomości na log. Dodaj do intencji proste dane, odbierz je i zwróć rezultat do aktywności startowej. Wskazówka: przypomnij sobie główne role manifestu zapoznaj się z jego kreatorami, zaimplementuj najważniejsze metody zwrotne aktywności.
  15. 17.

    17 Zadania domowe: 1. Zapoznaj się z komponentami AutoCompleteTextView, Spinner,

    CheckBox, RadioGroup. Wypełnij kontrolki danymi i obsłuż wybór użytkownika. 2. Zaimplementuj prosty kalkulator.
  16. 18.

    18 Wskazówki • użycie AutoCompleteTextView (dodaj właściwość hint oraz completionThreshold)

    AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.color_auto_complete); String[] colors = {"bialy", "brazowy", "czerwony", "czarny"}; ArrayAdapter<String> colorAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, colors); actv.setAdapter(colorAdapter); • tablicę wartości można stworzyć również jako zasób w /res/values/arrays.xml <resources> <string-array name="colors"> <item>biały</item> <item>brązowy</item> <item>czerwony</item> <item>czarny</item> </string-array> </resources> • przykładowe atrybuty konfiguracyjne Spinnera android:entries="@array/colors" android:prompt="@string/colors_prompt" • obsłuż wybór elementu Spinnera rejestrując OnItemSelectedListener, dla CheckBoksa OnCheckedChangeListener