Android Action Bar

Transkrypt

Android Action Bar
Android Action Bar
Adrian Skrobacz
AGH Wydział Elektrotechniki, Automatyki,
Informatyki i Inżynierii Biomedycznej
1.12.2015
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
1 / 23
Czym jest Action Bar?
Opis
Action Bar to jedna z najważniejszych cz˛eści interfejsu użytkownika.
Zanajduje sie˛ praktycznie w każdej aplikacji. Widczny jest najcz˛eściej
na górze ekranu jako pasek z nazwa˛ aktywności oraz szeregiem
przycisków.
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
2 / 23
Dlaczego nie używać Action Bar’a?
Action Bar jest już przestażałym komponentem, który miał małe
możliwości. Nie za bardzo dało sie˛ zmodyfikować jego wyglad,
˛
położenie itp. Na szcz˛eście został zastapiony
˛
przez Toolbar, który
można znaleźć w support library v7. Nie posiada on już wad swojego
poprzednika, a co najważniejsze jest zwyczajnym ViewGroup co
oznacza, że możemy go dodać w dowolnym miejscu w naszym pliku
xml wygladu.
˛
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
3 / 23
Elementy Toolbar’a
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
4 / 23
Przejdźmy do kodu
Na poczatku
˛
aby pozbyć sie˛ naszego domyślnego, przestarzałego i
brzydkiego Action Bar’a trzeba dodać kilka wpisów głównym stylu
aplikacji:
<style name="AppTheme"
parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
W tym przykładzie nasza aplikacja nie bedzie
˛
miala Action Bar’a,
ponieważ podziedziczyliśmy po stylu NoActionBar. Można też
wyłaczyć
˛
go dodajac
˛ wpisy w stylu:
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
5 / 23
Dodajemy nasz Toolbar do layout’u
Dobra˛ praktyka˛ jest stworzenie osobnego pliku xml z layout’em tylko
dla naszego toolbara np. plik toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary">
</android.support.v7.widget.Toolbar>
Zwróćcie uwage˛ na atrybut background bez niego nasz Toolbar
bedzie
˛
przeźroczysty.
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
6 / 23
Dodajemy nasz Toolbar do layout’u cz. 2
Tak przygotowany plik możemy/powinniśmy dodać do każdego
naszego pliku layout’u aktywności:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout ...>
<include
android:id="@+id/toolbar"
layout="@layout/toolbar"/>
<Button
android:layout_below="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
</RelativeLayout>
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
7 / 23
Dodajemy nasz Toolbar do layout’u cz. 3
Ostatnim krokiem jaki musimy wykonać, to powiedzenie naszej
aktywności, że od tej pory naszym Action Bar’em jest nasz piekny
˛
Toolbar:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actvity_main);
Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
8 / 23
Toolbar przydatne metody
@Override
protected void onCreate(Bundle savedInstanceState) {
...
setSupportActionBar(toolbar);
//Pokaż przycisk wstecz <getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//Dodaj ikon˛
e do Toolbar’a
getSupportActionBar().setIcon(R.mipmap.ic_launcher);
...
}
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
9 / 23
Menu
Jedna˛ z podstawowych funkcji Toolbara jest udostepnianie
˛
menu
aplikacji. Aby stwożyć menu trzeba wykonać kilka kroków:
z Stworzyć plik z naszym menu w katalogu menu w resources
z Nadpisać metode˛ onCreateOptionsMenu(Menu menu) w
aktywności
z Nadpisac metode˛ onOptionsItemSelected(MenuItem
item) w aktywności, w celu obsługi kliknieć
˛ na poszczególne
elementy menu
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
10 / 23
Definiowanie menu w xml
Przykładowy plik z menu(menu.xml):
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/okitem"
android:title="@string/ok"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/search"
app:showAsAction="always"/>
<item
android:id="@+id/settings"
android:orderInCategory="100"
android:title="@string/settings"
app:showAsAction="never"/>
</menu>
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
11 / 23
Nadpisujemy metody w aktywności
Najpierw nadpisujemy metode˛ onCreateOptionsMenu, która
stworzy obiekt Menu z naszego pliku xml.
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
12 / 23
Nadipisujemy metody w aktywności cz. 2
Nastepnie
˛
nadpisujemy
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==R.id.search) {
Toast.makeText(this, R.string.clicked, Toast.LENGTH_SHOR
return true;
}
return super.onOptionsItemSelected(item);
}
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
13 / 23
Nadipisujemy metody w aktywności cz.
3(opcjonalnie)
Jeśli chcemy dynamicznie modyfikować nasze menu dobrym na to
miejscem jest metoda onPrepareOptionsMenu. Na przykład
możemy usunać
˛ jakis element:
public boolean onPrepareOptionsMenu(Menu menu) {
menu.removeItem(R.id.okitem);
return true;
}
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
14 / 23
Menu podsumowanie
W ten oto sposób mamy działajace
˛ menu. Warto zaznaczyć, że:
z elementy menu moga˛ mieć różne typy np. element z
checkbox’em.
z w menu można zagnieżdżać dodajac
˛ wewnatrz
˛ item kolejny
menu
z elementy w menu wystepuj
˛ a˛ w kolejności wystepowania
˛
w pliku
xml chyba, że zdefiniujemy inna˛ kolejność poprzez atrybut
orderInCategory(sortowanie od 0 w wzwyż)
z elementu menu można grupować tag’iem group
z całe menu mozna zbudować też z kodu
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
15 / 23
CAB czyli Contextual Action Mode
Co to jest
Z perspektywy użytkownika jest to nowy Toolbar, który pojawia sie˛
na/zamiast naszego Toolbara, na czas jakiejś akcji i pozwala na
dodatkowe operacje. Dobrym przykładem kiedy CAB wkracza do akcji
jest kopiowanie tekstu. CAB wtedy pojawia sie˛ na naszym Toolbarz’e z
przyciskami pozwalajacymi na skopiowanie, wyciecie
˛
itp. tekstu.
(a) Bez CAB
A. Skrobacz (AGH EAIIB)
Android Action Bar
(b) CAB
2015
16 / 23
CAB implementacja
Implementacja CAB sprowadza sie˛ do zaimplementowania interfejsu
ActionMode.Callback. Aby uruchomić CAB wystarczy wywołac na
aktywności metode˛
startSupportActionMode(ActionMode.Callback) lub
startActionMode(ActionMode.Callback) spowoduje to
wyświetlenie CAB i wywołanie odpowiednich metod w naszym
callback’u.
Warto wspomnieć, że aby CAB poprawnie sie˛ wyświetlał na Toolbarz’e
należy dodać w stylach wpis:
<item name="windowActionModeOverlay">true</item>
W przeciwnym wypadku wyświetli sie˛ on nad Toolbar’em, co nie jest
pożadanym
˛
efektem.
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
17 / 23
ActionView
ActionView pozwalaja˛ na dodanie do menu Toolbara zamiast samych
ikonek i tesktu także własnego layoutu. Można go podac przy definicji
menu w xml’u za pomoca˛ atrybutu actionLayout. Można także
zimplementowac własny ActionView i podac pełna˛ nazwe˛ klasy w
atrybucie actionViewClass
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
18 / 23
SearchView
W Androidzie znajdziemy gotowy ActionView o nazwie SearchView
implementujacy
˛ funkcjonalność wyszukiwarki.
<item
android:id="@+id/search"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/search"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView"/>
Dobieranie sie˛ do SearchView z poziomu aktywności(metoda
onCreateOptionsMenu):
SearchView searchView = (SearchView) menu.findItem(R.id.search).
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
19 / 23
ActionProvider
Najlepszym przykładem i opisem bedzie
˛
ShareActionProvider.
Każdy z chyba kojaży przycisk Udostepnij,
˛
który od czasu do czasu
pojawia sie˛ w Toolbar’ach aplikacji i pozwala nam podzielić sie˛ ze
światem naszym zdjeciem
˛
:). To właśnie jest
ShareActionProvider. Różnica˛ pomiedzy
˛
ActionProvider, a
ActionView jest to, że action view działa w obrebie
˛
Toolbar’a,
natomiast ActionProvider ma pełna˛ kontrole nad tym jak i gdzie
wyświetla. Jak sie˛ tworzy i obsługuje ActionProvider’a? Odsyłam
do dokumentacji :):
z ActionProvider
z ShareActionProvider
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
20 / 23
Dwa słowa o wodotryskach
W bibliotece google com.android.support:design znajdziemy wiele
ciekawych i pomocnych klas do stworzenia animacji dla Toolbar’a.
Warto zajrzeć na klasy:
z android.support.design.widget.CoordinatorLayout
z android.support.design.widget.AppBarLayout
z android.support.design.widget.
CollapsingToolbarLayout
Z ich pomoca˛ w prosty sposób można stworzyć chowajacy
˛ sie˛ Toolbar,
czy też Toolbar który rozszerza sie˛ kiedy przesuwamy palec do w dół a
zmniejsza sie˛ do normalnej postaci kiedy przesuwamy palec do góre˛
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
21 / 23
Zadanie
Napisać prosta˛ aplikacje˛ z Toolbar’em na górze ekranu i kilkoma
przyciskami w menu.
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
22 / 23
Dzieki
˛
http://student.agh.edu.pl/~skrobacz/
A. Skrobacz (AGH EAIIB)
Android Action Bar
2015
23 / 23

Podobne dokumenty