Zawsze czytam o tej zabawnej wartości masy w dokumentacji Androida. Teraz chcę spróbować po raz pierwszy, ale w ogóle nie działa.
Jak rozumiem z dokumentacji ten układ:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
</LinearLayout>
powinny utworzyć dwa przyciski, które są wyrównane w poziomie i równo dzielą przestrzeń. Problem polega na tym, że dwa przyciski nie rosną, aby wypełnić przestrzeń.
Chciałbym, żeby przyciski rosły i wypełniały całą linię. Jeśli oba przyciski są ustawione tak, aby pasowały do rodzica, tylko pierwszy przycisk jest wyświetlany i wypełnia całą linię.
Odpowiedzi:
Nie ustawiasz
layout_weight
właściwości. Twój kod czytaweight="1"
i powinien czytaćandroid:layout_weight="1"
.źródło
3 rzeczy do zapamiętania:
Przykład:
A wynik:
źródło
addView(button, new LinearLayout.LayoutParams(0, height, 1));
To prawda, nawet jeśli pompujesz układy o prawidłowych wartościach szerokości i wagi.Jest
android:layout_weight
. Waga może być używana tylko wLinearLayout
. Jeśli orientacja liniowego podziału jest pionowa, użyj,android:layout_height="0dp"
a jeśli orientacja jest pozioma, użyjandroid:layout_width = "0dp"
. Będzie działać idealnie.źródło
Ten obraz podsumowuje układ liniowy.
Możesz kliknąć ten link, aby uzyskać więcej informacji na ten temat. Po prostu matematyka - widoki, grupy i układy
Samouczek wideo dla układu liniowego: szerokość, wysokość i ciężary
Samouczek układu liniowego Androida
źródło
Spróbuj ustawić
layout_width
oba przyciski na „0dip”, aweight
oba przyciski na0.5
źródło
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 to zero
obliczenia w celu przypisania pozostałej / dodatkowej przestrzeni między dzieckiem. (nie całkowita przestrzeń)
spacja przypisana do child = (indywidualna waga dziecka) / (suma wagi każdego dziecka w układzie liniowym)
Przykład (1): jeśli istnieją trzy pola tekstowe, a dwa z nich deklarują wagę 1, podczas gdy trzecie nie ma żadnego ciężaru (0), wówczas pozostałe / dodatkowe miejsce przypisuje się do
Przykład (2) : załóżmy, że mamy etykietę tekstową i dwa elementy edycji tekstu w poziomym rzędzie. W etykiecie nie określono ciężaru układu, więc zajmuje minimalną przestrzeń wymaganą do renderowania. Jeśli parametr layout_weight każdego 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).
Jeśli pierwsze jedno pole tekstowe ma wagę układu 1, a drugie pole tekstowe ma wagę układu 2, wówczas jedna trzecia pozostałej przestrzeni zostanie przydzielona pierwszemu, a dwie trzecie drugiej (ponieważ twierdzimy, że drugie pole to ważniejsze).
źródło
W polu Szerokość przycisku, wymienić
wrap-content
z0dp
.Użyj atrybutu layout_weight widoku.
Tak będzie wyglądał Twój kod:
layout_weight służy do rozdzielenia pozostałej przestrzeni na proporcje. W tym przypadku dwa przyciski mają szerokość „0dp”. Pozostała przestrzeń zostanie podzielona na proporcje 1: 1, tzn. Przestrzeń zostanie równo podzielona między widoki przycisków.
źródło
Jak odpowiedź @Manoj Seelan
Wymienić
android:layout_weight
Withandroid:weight
.Gdy używasz wagi z
LinearLayout
. należy dodaćweightSum
wLinearLayout
i zgodnie z orientacją swojejLinearLayout
trzeba zachodzącego0dp
na szerokość / wysokość do wszystkichLinearLayout
`s poglądów dzieciPrzykład:
Jeśli Orientacja
Linearlayout
jestVertical
, to Ustaw szerokość wszystkichLinearLayout
widoków potomnych za pomocą0dp
Jeśli orientacja
Linearlayout
jesthorizontal
, to Ustaw wysokość wszystkichLinearLayout
widoków potomnych za pomocą0dp
.źródło
Być może ustawienie obu właściwości layout_width przycisków na „fill_parent” załatwi sprawę.
Właśnie przetestowałem ten kod i działa on w emulatorze:
Pamiętaj, aby ustawić parametr layout_width na „fill_parent” na obu przyciskach.
źródło
źródło
W powyższym pliku XML ustaw
android:layout_weight
układ liniowy jako2
:android:layout_weight="2"
źródło
Dodatkowo musisz dodać to
android:layout_width="0dp"
dla widoków dzieci [Widok przycisków]LinerLayout
źródło
Musisz tak napisać, że działa dla mnie
źródło
Poniżej znajdują się zmiany (oznaczone BOLD ) w kodzie:
Ponieważ układ LinearLayout ma orientację poziomą, musisz zachować szerokość tylko 0dp. do używania obciążników w tym kierunku. (Gdyby twoja orientacja była pionowa, utrzymałbyś wysokość tylko 0dp) .
Ponieważ są dwa widoki, które zostały umieszczone
android:layout_weight="1"
dla obu widoków, oznacza to, że oba widoki zostaną podzielone równo w kierunku poziomym (lub według szerokości).źródło
źródło
To idealna odpowiedź na Twój problem
źródło
Podstawić
wrap_content
zfill_parent
.źródło
źródło