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. 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 <sdk>/extras/android/support, gdzie <sdk> to katalog, w którym zainstalowano wcześniej Android SDK Dalsze kroki opisują przypadek korzystania z Android Developer Tools Bundle (Eclipse).
  2. Import i dołączenie projektu AppCompat 1. Wybierz File > Import

    > Existing Android Code Into Workspace 2. Zaimportuj katalog <sdk>/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
  3. 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 <uses-sdk> pliku Manifest. xml musi mieć wartość nie mniejszą niż 7. Nadaj odpowiedni styl aktywności w powyższym pliku, zmieniając węzeł <activity>: 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. <activity android:theme="@style/Theme. AppCompat.Light" ... > Jar mismatch! Found 2 versions of android-support-v4.jar
  4. 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). <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_search" android:icon="@drawable/action_search" android:title="Search" /> <item android:id="@+id/action_save" android:icon="@drawable/action_save" android:title="Save" /> <item android:id="@+id/action_friends" android:icon="@drawable/action_friends" android:title="Find Friends" /> </menu>
  5. 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).
  6. 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: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:mobilabs="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:icon="@drawable/action_search" android:title="Search" mobilabs:showAsAction="ifRoom|withText" /> <item android:id="@+id/action_save" android:icon="@drawable/action_save" android:title="Save" mobilabs:showAsAction="ifRoom|withText" /> <item android:id="@+id/action_friends" android:icon="@drawable/action_friends" android:title="Find Friends" mobilabs:showAsAction="ifRoom|withText" /> </menu> <!-- sprawdz tez mobilabs:showAsAction="always" -->
  7. 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).
  8. 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 } }
  9. 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: <activity android:theme="@style/Theme.AppCompat.Light" android:uiOptions="splitActionBarWhenNarrow" ... > <meta-data android:name="android.support.UI_OPTIONS" android:value="splitActionBarWhenNarrow" /> <intent-filter> ... </intent-filter> </activity> ActionBar actionBar = getSupportActionBar(); actionBar.hide(); // actionBar. show(); actionBar.setTitle("Code Lab 01"); actionBar.setSubtitle("Subtitle");
  10. ‘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(): <activity android:name="eu.mobilabs.android.codelab01. ChildActivity" android:parentActivityName="eu.mobilabs.android.codelab01.MainActivity" ... > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="eu.mobilabs.android.codelab01.MainActivity" /> </activity> getSupportActionBar(). setDisplayHomeAsUpEnabled(true);
  11. ‘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)); } });