198
Rozdział 5.
Widoki
Komponenty GUI są typami pochodnymi klasy View
Przekonałeś się już, że komponenty GUI są typami widoków — okazuje się,
że wszystkie one są klasami pochodnymi klasy
android.view.View
. Oznacza to,
że wszystkie komponenty GUI, których używamy w interfejsie użytkownika, mają
wspólne atrybuty i zachowania. Wszystkie one mogą być wyświetlane na ekranie
i wszystkie pozwalają określać swoją szerokość i wysokość. Wszystkie komponenty
GUI, których używamy do tworzenia interfejsów użytkownika, dziedziczą te
podstawowe funkcjonalności i je rozszerzają.
android.view.View
...
android.widget.TextView
...
android.widget.Spinner
...
android.widget.EditText
...
android.widget.Button
...
Klasa android.view.View
jest klasą bazową wszystkich
komponentów GUI używanych do
tworzenia interfejsów użytkownika
aplikacji.
android.widget.TextView
jest bezpośrednią klasą
pochodną klasy View.
Spinner to typ widoku,
który poznałeś w rozdziale 2.
Przyjrzymy mu się bliżej
w dalszej części tego rozdziału.
Układy są typami
pochodnymi klasy
ViewGroup. ViewGrup
jest klasą pochodną
klasy View.
android.view.View
...
android.view.ViewGroup
...
android.widget.
LinearLayout
...
android.widget.
RelativeLayout
...
android.widget.
GridLayout
...
Układy dziedziczą po klasie ViewGroup
Nie tylko komponenty GUI są widokami — klasami pochodnymi klasy View.
Okazuje się, że także układy są wyspecjalizowanymi typami widoków,
a nazywamy je
grupami widoków
. Wszystkie widoki są klasami pochodnymi
klasy
android.view.ViewGroup
. Grupa widoków to wyspecjalizowany widok,
który może zawierać inne widoki.
Komponent GUI
jest typem widoku,
obiektem zajmującym
miejsce na ekranie.
Układ jest obiektem
określanym jako grupa
widoków — to widok
specjalnego typu,
który może zawierać
inne widoki.
Widoki i grupy widoków
199
jesteś tutaj
Co nam daje bycie widokiem?
Obiekt
View
zajmuje prostokątny obszar na ekranie. Zawiera on
wszystkie funkcjonalności, których potrzebują widoki, by móc prowadzić
szczęśliwy i użyteczny żywot w Androidowie. Poniżej wymieniliśmy kilka
spośród tych funkcjonalności, które według nas są najważniejsze.
Odczytywanie i ustawianie właściwości
Za kulisami każdy widok jest obiektem Javy. Oznacza to, że w kodzie
aktywności możemy odczytywać i ustawiać wartości jego właściwości.
Na przykład możemy odczytać wartość wybraną z listy rozwijanej lub
zmienić tekst prezentowany w widoku tekstowym. Konkretne właściwości
i metody, jakie są dostępne, zależą od typu widoku.
Aby umożliwić wykonywanie takich operacji, z każdym widokiem można
skojarzyć identyfikator, dzięki któremu będzie można odwoływać się do
danego widoku w kodzie aktywności.
Wielkość i położenie
Możemy określać szerokość i wysokość widoku, tak by Android wiedział,
jaką ma on mieć wielkość. Oprócz tego możemy określić, czy widok ma
mieć jakieś wypełnienie, czy nie.
Po wyświetleniu widoku możemy odczytać jego położenie i faktyczne
wymiary na ekranie.
Obsługa miejsca wprowadzania
Android obsługuje przenoszenie miejsca wprowadzania w zależności od
czynności wykonywanych przez użytkownika. Obejmuje to odpowiednie
reakcje na widoki ukryte, usuwane lub wyświetlane.
Obsługa zdarzeń i obiekty nasłuchujące
Każdy z widoków może odpowiadać na zdarzenia. Możemy także
tworzyć obiekty nasłuchujące, które reagują na to, co się dzieje
z widokiem. Na przykład wszystkie widoki mogą reagować na utratę
miejsca wprowadzania, a przyciski (i ich klasy pochodne) mogą reagować
na kliknięcia.
android.view.View
getId()
getHeight()
getWidth()
setVisibility(int)
findViewById(int)
isClickable()
isFocused()
requestFocus()
...
Ten schemat przedstawia kilka
metod klasy View, których
możemy używać w kodzie
aktywności. Ponieważ zostały
one zdefiniowane w klasie
bazowej View, są dostępne
także we wszystkich widokach
i grupach widoków.
Ponieważ grupa widoków sama jest typem widoku, wszystkie układy
i komponenty GUI dysponują tymi samymi, podstawowymi możliwościami
funkcjonalnymi.
200
Rozdział 5.
Hierarchia widoków
Układ jest tak naprawdę hierarchią widoków
Układy, które definiujemy w kodzie XML, dają nam w rzeczywistości hierarchiczne drzewo
widoków i grup widoków
. Na przykład poniżej przedstawiliśmy układ liniowy zawierający
przycisk i pole tekstowe. Układ liniowy jest grupą widoków, natomiast przycisk i pole tekstowe
są widokami. Grupa widoków jest elementem nadrzędnym, widoki zaś są jego elementami
podrzędnymi:
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
... >
<Button
android:id=”@+id/send”
... />
<EditText
android:id=”@+id/message”
... />
</LinearLayout>
ViewGroup
ViewView
Układ liniowy
Przycisk
Pole tekstowe
W tym przykładzie
pominęliśmy duże
fragmenty kodu
XML. Kluczowe
znaczenie mają tu
widoki umieszczone
w grupie widoków.
Podczas tworzenia aplikacji kod XML układu jest za kulisami przekształcany na obiekt
ViewGroup
, który zawiera drzewo obiektów
View
. W powyższym przykładzie przycisk
zostanie przekształcony na obiekt
Button
, a pole tekstowe — na obiekt
EditText
.
Button
i
EditText
to dwie klasy pochodne klasy
View
.
<Layout>
</Layout>
layout.xml
ViewGroup
View View
Układ liniowy
Przycisk
Pole tekstowe
To właśnie dzięki temu możemy operować na widokach w kodzie Javy.
Za kulisami wszystkie widoki są bowiem przekształcane do postaci
obiektów typu
View
.
Get Android Programowanie aplikacji. Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.