Widoki i grupy widoków
179
jesteś tutaj
¨
Układ LinearLayout
¨
Układ FrameLayout
Rozciągaaaaamy widok, zwiększając jego wa
Wysokość wszystkich widoków w naszym przykładowym układzie jest możliwie
jak najmniejsza zajmują one w pionie tylko tyle miejsca, ile jest niezbędne
do wyświetlenia ich zawartości. My chcielibyśmy natomiast, by pole przeznaczone
do podania treści widomości zajęło całą wysokość układu dostępną
po wyświetleniu pozostałych widoków.
Chcemy, by pole Treść
wiadomości zajęło całą
wysokość układu dostępną
po wyświetleniu pozostałych
widoków.
W tym celu musimy dodać temu polu tekstowemu nieco
wagi
(ang. weight).
Dodając widokowi wagę, informujemy, że ma on zająć nieco więcej miejsca
w układzie.
Do określania wagi widoku służy następujący atrybut:
android:layout_weight=”liczba”
gdzie
liczba
to liczba większa od
0
.
W przypadku określenia wagi jakiegoś widoku układ w pierwszej kolejności
upewnia się, czy każdy widok dysponuje dostatecznie dużym obszarem,
koniecznym do wyświetlenia jego zawartości. Innymi słowy: upewnia się, czy każdy
przycisk ma miejsce na wyświetlenie umieszczonego na nim tekstu, każde pole
tekstowe — na wyświetlenie tekstu podpowiedzi, i tak dalej. Następnie układ
określa wielkość pozostałego obszaru i dzieli go proporcjonalnie, rozdzielając
pomiędzy elementy, których waga jest większa od
1
.
¨
Układ LinearLayout
¨
Układ FrameLayout
180
Rozdział 5.
Atrybut layout_weight
Dodawanie wagi do widoków
Chcemy, by pole tekstowe do podawania treści wiadomości zajmowało jak najwięcej
miejsca w układzie. W tym celu dodamy do niego atrybut
layout_weight
i przypiszemy
mu wartość
1
. Ponieważ będzie on jedynym widokiem, w którym określimy wagę,
zostanie on rozciągnięty w pionie i zajmie całą dostępną wysokość układu pozostałą
po wyświetleniu reszty widoków. Poniżej przedstawiliśmy zmodyfikowany kod układu:
Pole do podania treści
wiadomości ma wagę 1.
Ponieważ jest to jedyny widok
układu, w którym została
określona waga, zostanie
ono rozciągnięte i zajmie
cały dostępny obszar układu
pozostały po wyświetleniu
reszty widoków.
Domyślnie tekst
podpowiedzi, Treść
wiadomości, jest
wyświetlany w połowie
wysokości pola tekstowego.
Zajmiemy się nim już
niebawem.
<LinearLayout ... >
<EditText
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:hint=”@string/to” />
<EditText
android:layout_width=”match_parent”
android:layout_height=”0dp”
android:layout_weight=”1”
android:hint=”@string/message” />
<Button
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/send” />
</LinearLayout>
Do tych elementów <EditText> i <Button>
nie dodaliśmy atrybutu layout_weight.
Zajmą one zatem tylko tyle miejsca,
ile jest konieczne do wyświetlenia
ich zawartości.
To jest jedyny
widok w układzie,
w którym określiliśmy
wagę. Zostanie on
zatem rozciągnięty
i zajmie cały wolny
obszar układu, który
nie został zużyty
przez pozostałe
widoki.
Wysokość tego widoku zostanie określona
przez układ liniowy na postawie wartości
atrybutu layout_weight. Przypisanie atrybutowi
layout_height wartości 0dp jest bardziej
efektywne niż użycie wartości „wrap_content”.
Przypisanie polu tekstowemu do podania treści wiadomości wagi
1
oznacza,
że ma ono zająć cały dostępny obszar ekranu, który nie został zajęty przez
inne widoki. Dzieje się tak dlatego, że do żadnego innego widoku nie
dodaliśmy atrybutu
layout_weight
.
¨
Układ LinearLayout
¨
Układ FrameLayout
Widoki i grupy widoków
181
jesteś tutaj
¨
Układ LinearLayout
¨
Układ FrameLayout
Dodawanie wagi do większej liczby widoków
W naszym przykładzie atrybut
layout_weight
dodaliśmy tylko do jednego widoku.
A co by się stało, gdyby takich widoków było
więcej?
Załóżmy, że pierwszemu polu tekstowemu,
Do, przypiszemy wagę
1
, a drugiemu,
Treść wiadomości, przypiszemy wagę
2
:
Pole Do ma wagę 1, zatem
zostanie mu przydzielona
1/3 pozostałego miejsca
w układzie.
Pole Treść
wiadomości ma
wagę 2, więc
zostaną mu
przydzielone 2/3
pozostałego miejsca
w układzie.
<LinearLayout ... >
...
<EditText
android:layout_width=”match_parent”
android:layout_height=”0dp”
android:layout_weight=”1”
android:hint=”@string/to” />
<EditText
android:layout_width=”match_parent”
android:layout_height=”0dp”
android:layout_weight=”2”
android:hint=”@string/message” />
...
</LinearLayout>
Aby określić, ile dodatkowego miejsca zajmie każdy z widoków,
musimy zacząć od zsumowania wartości atrybutów
layout_weight
wszystkich widoków. W tym przypadku suma ta wyniesie 1+2=3.
Wielkość dodatkowego miejsca przydzielonego każdemu widokowi
będzie odpowiadała jego wadze podzielonej przez sumę wszystkich
wag. Pole
Do ma wagę 1, zatem zostanie mu przydzielona 1/3
pozostałego miejsca w układzie. Pole
Treść wiadomości ma wagę 2,
więc zostaną mu przydzielone 2/3 pozostałego miejsca.
¨
Układ LinearLayout
¨
Układ FrameLayout
To tylko przykład, tak na
prawdę nie mamy zamiaru
zmieniać układu by wyglądał
w ten sposób.

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.