Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Adam Jodłowski

March 16, 2013
Tweet

More Decks by Adam Jodłowski

Other Decks in Programming

Transcript

  1. Android School
    Warsztat 01
    Adam Jodłowski

    View Slide

  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

    View Slide

  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

    View Slide

  4. 4
    Zapoznanie ze środowiskiem pracy
    i utworzenie nowej aplikacji.

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  8. 8
    Pozycjonowanie w LinearLayout
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:gravity="center_vertical" >
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="Button 1" />
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="Button 2" />

    View Slide

  9. 9
    Pozycjonowanie w RelativeLayout
    android:layout_height="wrap_content" >
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
    android:layout_below="@id/imie_i_nazwisko"
    android:layout_alignParentRight="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Zatwierdz" />
    android:layout_alignBaseline="@id/zatwierdz"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Anuluj" />

    View Slide

  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.

    View Slide

  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

    View Slide

  12. 12

    View Slide

  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

    View Slide

  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);

    View Slide

  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);

    View Slide

  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.

    View Slide

  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.

    View Slide

  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 colorAdapter = new ArrayAdapter(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


    biały
    brązowy
    czerwony
    czarny



    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

    View Slide