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

Android Code Lab 01

Android Code Lab 01

Instalacja i użycie ActionBarCompat na starszych wersjach Androida.

https://dl.dropboxusercontent.com/u/20220/CodeLab01.zip

Adam Jodłowski

November 03, 2013
Tweet

More Decks by Adam Jodłowski

Other Decks in Programming

Transcript

  1. Android Code Lab 01
    ActionBarCompat
    google.com/+AdamJodłowski

    View full-size slide

  2. Instalacja Support Library v7 (AppCompat)
    Oprócz domyślnie załączanej do nowych projektów Androidowych biblioteki Support
    Library v4, dla zapewnienia kompatybilności ze starszymi odsłonami systemu
    operacyjnego, niezbędna będzie nam biblioteka dla wersji 7.
    Zawiera ona niezbędne zasoby, musi być zatem dołączona jako projekt biblioteczny, a
    nie tradycyjne archiwum .jar.
    1. Uruchom Android SDK Manager
    2. Z katalogu Extras, zainstaluj:
    ● Android Support Library (dla Eclipse)
    ● Android Support Repository (dla Android Studio)
    3. Odpowiednie pliki pojawią się w katalogu /extras/android/support, gdzie
    to katalog, w którym zainstalowano wcześniej Android SDK
    Dalsze kroki opisują przypadek korzystania z Android Developer Tools Bundle (Eclipse).

    View full-size slide

  3. Import i dołączenie projektu AppCompat
    1. Wybierz File > Import > Existing Android Code Into Workspace
    2. Zaimportuj katalog /extras/android/support/v7/appcompat
    3. Projekt pojawi się na liście jako android-support-v7-appcompat
    4. Wejdź (z IDE) do katalogu /libs zaimportowanego projektu, zaznacz oba jary, kliknij
    na nich PPM i wybierz Build Path > Add to Build Path
    5. Kliknij PPM na projekcie, wybierz Build Path > Configure Build Path, w zakładce
    Order and Export zaznacz obydwa właśnie dodane pliki .jar
    6. Odznacz Android Dependencies i zatwierdź zmiany
    Kliknij PPM na projekcie, do którego chcesz dołączyć bibliotekę AppCompat:
    1. Properties > sekcja Android > sekcja Library > Add, wybierz AppCompat, nie
    zaznaczaj Is Library, zatwiedź zmiany
    2. W razie problemów, dodatkowo wykonaj: Properties > sekcja Java Build Path >
    sekcja Projects > Add, wybierz AppCompat, zatwierdź zmiany

    View full-size slide

  4. Aktywność z ActionBarem
    Utwórz aktywność rozszerzającą klasę android.support.v7.app.ActionBarActivity.
    Ona sama rozszerza FragmentActivity, więc możemy korzystać z fragmentów bez
    przeszkód.
    Pamiętaj, że parametr android:minSdkVersion w węźle pliku Manifest.
    xml musi mieć wartość nie mniejszą niż 7.
    Nadaj odpowiedni styl aktywności w powyższym pliku, zmieniając węzeł :
    W przypadku wystąpienia problemu
    Należy pozbyć się jednego (starszego) z plików android-support-v4.jar, na przykład
    usuwając go z katalogu /libs naszego projektu, ponieważ jest on już częścią dołączonego
    projektu AppCompat.

    Jar mismatch! Found 2 versions of android-support-v4.jar

    View full-size slide

  5. Elementy akcji menu
    Elementy wchodzące w skład ActionBara deklarujemy analogicznie do elementów
    tradycyjnego menu aplikacji, w katalogu zasobów /res/menu, np. w pliku main.xml:
    Poza deklaracją menu w pliku XML, musimy mieć przesłoniętą metodę aktywności
    onCreateOptionsMenu(Menu menu) wraz z jej tradycyjną implementacją (jest
    generowana przez nowe wersje wtyczki ADT).

    android:icon="@drawable/action_search"
    android:title="Search" />
    android:icon="@drawable/action_save"
    android:title="Save" />
    android:icon="@drawable/action_friends"
    android:title="Find Friends" />

    View full-size slide

  6. Elementy akcji menu
    Elementy akcji menu pojawią się jako tradycyjne menu dostępne pod sprzętowym
    przyciskiem menu (po lewej) albo w ActionBar jako tzw. overflow menu na urządzeniach
    z wirtualnymi przyciskami systemowymi (po prawej).

    View full-size slide

  7. Elementy akcji w postaci ikon
    Aby wyświetlać najważniejsze elementy akcji jako ikony bezpośrednio na obszarze
    ActionBara (zamiast schowanych w overflow menu), dokonujemy modyfikacji XML:
    xmlns:mobilabs="http://schemas.android.com/apk/res-auto" >
    android:icon="@drawable/action_search"
    android:title="Search"
    mobilabs:showAsAction="ifRoom|withText" />
    android:icon="@drawable/action_save"
    android:title="Save"
    mobilabs:showAsAction="ifRoom|withText" />
    android:icon="@drawable/action_friends"
    android:title="Find Friends"
    mobilabs:showAsAction="ifRoom|withText" />


    View full-size slide

  8. Elementy akcji w postaci ikon
    Elementy, dla których wystarczyło miejsca na
    ActionBarze, pokazują się jako ikony (po prawej).
    Jeśli elementom menu nadamy atrybuty icon oraz title,
    oraz ustawimy właściwość atrybutu:
    mobilabs:showAsAction="ifRoom |withText"
    to w przypadku wystarczającego miejsca na ekranie,
    obok ikon pojawi się również odpowiadający im tekst.
    Jest to szczególnie pożądane w układzie poziomym
    aplikacji (patrz niżej).

    View full-size slide

  9. Reakcja na wybór elementów menu
    Kliknięcia w elementy menu obsługujemy tradycyjnie, przesłaniając metodę aktywności:
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.action_search:
    Log.d("CodeLab", "search");
    return true;
    case R.id.action_save:
    Log.d("CodeLab", "save");
    return true;
    case R.id.action_friends:
    Log.d("CodeLab", "friends");
    return true;
    default:
    return super.onOptionsItemSelected(item); // wazne dla fragmentow
    }
    }

    View full-size slide

  10. Split ActionBar, dodatkowe operacje
    Efekt rozbicia ActionBara na górny tytułowy i dolny z ikonami akcji, osiągamy
    modyfikując węzeł aktywności w pliku manifestu:
    android:theme="@style/Theme.AppCompat.Light"
    android:uiOptions="splitActionBarWhenNarrow" ... >
    android:name="android.support.UI_OPTIONS"
    android:value="splitActionBarWhenNarrow" />
    ...

    ActionBar actionBar = getSupportActionBar();
    actionBar.hide(); // actionBar. show();
    actionBar.setTitle("Code Lab 01");
    actionBar.setSubtitle("Subtitle");

    View full-size slide

  11. ‘Up’ Button
    1. Utwórz nową aktywność, z której powrócimy do aktywności głównej
    2. Zadeklaruj ją w manifeście używając niestandardowych atrybutów:
    Taka deklaracja mówi, że po naciśnięciu przycisku w górę, w aktywności ChildActivity,
    wrócimy do aktywności MainActivity.
    3. Aktywuj w aktywnościach przycisk w górę, np. w ich metodach onCreate():
    android:name="eu.mobilabs.android.codelab01. ChildActivity"
    android:parentActivityName="eu.mobilabs.android.codelab01.MainActivity"
    ... >
    android:name="android.support.PARENT_ACTIVITY"
    android:value="eu.mobilabs.android.codelab01.MainActivity" />

    getSupportActionBar(). setDisplayHomeAsUpEnabled(true);

    View full-size slide

  12. ‘Up’ Button
    4. Dodaj do głównej aktywności przycisk, który otworzy aktywność podrzędną, np.:
    5. Przetestuj działanie zaprezentowanego rozwiązania
    Zamiast deklaracji aktywności nadrzędnej w manifeście, możemy w aktywności
    podrzędnej przesłonić metody getSupportParentActivityIntent() oraz
    onCreateSupportNavigateUpTaskStack(). Takie rozwiązanie jest stosowane, jeśli
    aktywność nadrzędna jest określana dynamicznie w zależności od kontekstu.
    ((Button) this.findViewById(R.id.button))
    .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
    startActivity(new Intent(MainActivity.this, ChildActivity.class));
    }
    });

    View full-size slide