Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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:

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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 } }

Slide 10

Slide 10 text

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: ... ActionBar actionBar = getSupportActionBar(); actionBar.hide(); // actionBar. show(); actionBar.setTitle("Code Lab 01"); actionBar.setSubtitle("Subtitle");

Slide 11

Slide 11 text

‘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(): getSupportActionBar(). setDisplayHomeAsUpEnabled(true);

Slide 12

Slide 12 text

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