Nie rozumiem, jak używać tego atrybutu. Czy ktoś może mi powiedzieć o tym więcej?
650
Nie rozumiem, jak używać tego atrybutu. Czy ktoś może mi powiedzieć o tym więcej?
Za pomocą layout_weight
możesz określić stosunek wielkości między wieloma widokami. Np. Masz MapView
ai, table
które powinny pokazać dodatkowe informacje na mapie. Mapa powinna zajmować 3/4 ekranu, a tabela powinna zajmować 1/4 ekranu. Wtedy ustaw layout_weight
z map
do 3 oraz layout_weight
ztable
1.
Aby to działało, musisz również ustawić wysokość lub szerokość (w zależności od orientacji) na 0px.
W skrócie
layout_weight
określa, jaka część dodatkowej przestrzeni w układzie ma zostać przydzielona do widoku.LinearLayout obsługuje przypisywanie wagi poszczególnym dzieciom. Ten atrybut przypisuje wartość „ważności” do widoku i umożliwia jej rozwinięcie w celu wypełnienia pozostałej przestrzeni w widoku nadrzędnym. Domyślna waga widoków wynosi zero.
Obliczenia w celu przypisania pozostałej przestrzeni między dzieckiem
Ogólnie formuła jest następująca:
Przykład 1
Jeśli istnieją trzy pola tekstowe, a dwa z nich deklarują wagę 1, a trzeciemu nie przypisano wagi (0), wówczas pozostałej przestrzeni przypisuje się w następujący sposób:
Przykład 2
Załóżmy, że mamy etykietę tekstową i dwa elementy edycji tekstu w poziomym rzędzie. Etykieta nie jest
layout_weight
określona, więc zajmuje minimalną przestrzeń wymaganą do renderowania. Jeślilayout_weight
każdy z dwóch elementów edycji tekstu jest ustawiony na 1, pozostała szerokość w układzie nadrzędnym zostanie równo podzielona między nimi (ponieważ uważamy, że są one równie ważne).Obliczenie:
Jeśli zamiast tego pierwsze jedno pole tekstowe ma wartość
layout_weight
1, a drugie pole tekstowe ma wartośćlayout_weight
2, wówczas jedna trzecia pozostałego miejsca zostanie przyznana pierwszemu, a dwie trzecie drugiemu (ponieważ twierdzimy, że drugie jeden jest ważniejszy).Obliczenie:
Artykuł źródłowy
źródło
android:layout_width="0px"
jest ważne. Ponadto wagi nie muszą być liczbami całkowitymi.weightSum
pojawia się obraz? Czy to ma coś wspólnego zlayout_weight
?dodając do innych odpowiedzi, najważniejszą rzeczą, aby to zrobić, jest ustawienie szerokości (lub wysokości) układu na 0px
w przeciwnym razie zobaczysz śmieci
źródło
Jeśli istnieje wiele widoków obejmujących a
LinearLayout
, wówczaslayout_weight
każdemu z nich nadaje się proporcjonalny rozmiar. Widok o większejlayout_weight
wartości „waży” więcej, dzięki czemu zyskuje większą przestrzeń.Oto zdjęcie, aby wyjaśnić.
Teoria
Termin waga układu jest związany z pojęciem średniej ważonej w matematyce. To tak, jak na zajęciach na studiach, gdzie praca domowa jest warta 30%, frekwencja jest warta 10%, w połowie semestr jest warty 20%, a końcowy - 40%. Twoje wyniki dla tych części, po zważeniu razem, dają ci całkowitą ocenę.
To samo dotyczy wagi układu.
Views
W poziomejLinearLayout
każdy może trwać pewien procent całkowitej szerokości. (Lub procent wysokości pionuLinearLayout
.)Układ
Ten
LinearLayout
, którego używasz, będzie wyglądał mniej więcej tak:Pamiętaj, że musisz użyć
layout_width="match_parent"
doLinearLayout
. Jeśli użyjeszwrap_content
, to nie będzie działać. Zauważ też, żelayout_weight
nie działa dla widoków w RelativeLayouts (zobacz tutaj i tutaj odpowiedzi SO dotyczące tego problemu).Widoki
Każdy widok w poziomie
LinearLayout
wygląda mniej więcej tak:Pamiętaj, że musisz używać
layout_width="0dp"
razem zlayout_weight="1"
. Zapomnienie o tym powoduje problemy wielu nowych użytkowników. (Zobacz ten artykuł, aby uzyskać różne wyniki, nie ustawiając szerokości na 0.) Jeśli twoje widoki są w pionieLinearLayout
, tolayout_height="0dp"
oczywiście skorzystasz.W
Button
powyższym przykładzie ustawiłem wagę na 1, ale możesz użyć dowolnej liczby. Liczy się tylko suma. W trzech rzędach przycisków na pierwszym obrazie, który opublikowałem, liczby są różne, ale ponieważ proporcje są takie same, ważone szerokości nie zmieniają się w każdym rzędzie. Niektóre osoby lubią używać liczb dziesiętnych o sumie 1, aby w złożonym układzie było jasne, jaka jest waga każdej części.Ostatnia uwaga. Jeśli używasz wielu zagnieżdżonych układów
layout_weight
, może to mieć negatywny wpływ na wydajność.Dodatkowy
Oto układ xml dla górnego obrazu:
źródło
layout_weight
mówi Androidowi, jak dystrybuować swojeView
pliki wLinearLayout
. Android najpierw oblicza całkowitą proporcję wymaganą dla wszystkichView
s, które mają określoną wagę i umieszcza każdą z nichView
zgodnie z tym, jakiej części ekranu podała, której potrzebuje. W poniższym przykładzie Android wychwyciTextView
y mająlayout_weight
od0
(to jest standardowo) iEditText
y mająlayout_weight
od2
siebie, przy czymButton
ma ciężar1
. Dlatego Android przydziela „wystarczającą” przestrzeń do wyświetlenia,tvUsername
atvPassword
następnie dzieli pozostałą część szerokości ekranu na 5 równych części, z których dwie są przydzieloneetUsername
, dwie doetPassword
i ostatnia część dobLogin
:Wygląda jak:
i
źródło
Pomyśl tak, będzie łatwiej
Jeśli masz 3 przyciski, a ich waga wynosi odpowiednio 1,3,1, będzie działać jak tabela w HTML
Podaj 5 części dla tej linii: 1 część dla przycisku 1, 3 część dla przycisku 2 i 1 część dla przycisku 1
Uważać,
źródło
jednym z najlepszych wyjaśnień dla mnie było to (z samouczka Androida, poszukaj kroku 7) :
źródło
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weight określa, ile miejsca kontrolka musi uzyskać odpowiednio do innych kontrolek.
źródło
Za dodatkowe:
Dla
vertical
orientacji nie zapomnij ustawićheight
na 0dpDla
horizontal
orientacji nie zapomnij ustawićwidth
na 0dpźródło
Proszę spojrzeć na weightSum LinearLayout i layout_weight każdego widoku. android: weightSum = "4" android: layout_weight = "2" android: layout_weight = "2" Wysokość ich układu wynosi 0px, ale nie jestem pewien, czy to jest istotne
źródło
Łącząc obie odpowiedzi z
Flo i rptwsthi i roetzi,
Pamiętaj, aby zmienić swój
layout_width=0dp/px
, w przeciwnym razielayout_weight
przeciwnym razie zachowanie będzie działać odwrotnie, przy czym największa liczba zajmuje najmniejsze miejsce, a najniższa liczba zajmuje najwięcej miejsca.Poza tym niektóre kombinacje wag spowodują, że niektóre układy nie mogą zostać pokazane (ponieważ zajmują zbyt dużo miejsca).
Uważaj na to.
źródło
Dodanie
android:autoSizeTextType="uniform"
spowoduje automatyczne zmianę rozmiaru tekstuźródło
Jak sama nazwa wskazuje, waga układu określa, jaka ilość lub procent miejsca w danym polu lub widżecie powinno zajmować miejsce na ekranie.
Jeśli podamy wagę w orientacji poziomej, musimy ją określić
layout_width = 0px
.Podobnie, jeśli określamy wagę w orientacji pionowej, musimy ją określić
layout_height = 0px
.źródło