Mam układ liniowy (zorientowany poziomo), który zawiera 3 przyciski. Chcę, aby 3 przyciski miały stałą szerokość i były równomiernie rozmieszczone na szerokości układu liniowego.
Mogę sobie z tym poradzić, ustawiając grawitację liniowego podziału na środek, a następnie dostosowując dopełnienie przycisków, ale działa to na ustaloną szerokość i nie będzie działać przy zmianie urządzeń lub orientacji.
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:gravity="center">
<Button
android:id="@+id/btnOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnThree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
</LinearLayout>
android
android-linearlayout
jamspog
źródło
źródło
Odpowiedzi:
Rozwijając na odpowiedź fedj męska , jeśli ustawisz
layout_width
się0dp
i ustawićlayout_weight
dla każdego z przycisków 1, dostępna szerokość zostanie podzielona równo pomiędzy przyciskami.źródło
Jeśli nie chcesz, aby przyciski były skalowane, ale dostosuj odstępy między przyciskami (równe odstępy między wszystkimi przyciskami), możesz użyć widoków o wadze = „1”, które wypełnią przestrzeń między przyciskami:
źródło
Space
typu widoku. Sprawia, że rzeczy są nieco bardziej czytelne.Możesz używać go w następujący sposób.
źródło
Space
Do tej pory nie słyszałemMożna to zrobić poprzez nadanie zarówno
View
SAlayout_width
z0dp
orazlayout_weight
z1
:Sposób działania android layout_weight polega na tym, że:
match_parent
to podzieli przestrzeń, która pozostała w stosunkulayout_weight
s. Tak więc, jeśli dał widokówlayout_weight="2"
ilayout_weight="1"
stosunek wypadkowa będzie 2 do 1, czyli: pierwsza Zobacz dostanie 2/3 przestrzeni, która jest po lewej, a drugi widzenia 1/3.Dlatego właśnie, jeśli podasz
layout_width
rozmiar0dp
pierwszego kroku, nie ma żadnego dodatkowego znaczenia, ponieważ do obu widoków nie przypisano żadnej spacji. Wtedy tylko drugi punkt decyduje o tym, jaką przestrzeńView
otrzymuje każdy , dając w ten sposóbView
s określoną przez ciebie przestrzeń zgodnie ze współczynnikiem!Aby wyjaśnić, dlaczego
0dp
powoduje równe dzielenie się przestrzeni, podając przykład, który pokazuje coś przeciwnego: poniższy kod spowodowałby coś innego, ponieważexample text
teraz ma szerokość większą niż0dp
dlatego, żewrap_content
zamiast tego pozostawia wolne miejsce do podzielenia mniej niż 100% ponieważ tekst zajmuje miejsce. W rezultacie otrzymają 50% wolnego miejsca, ale tekst już zajął trochę miejsca, więcTextView
będzie miał znacznie ponad 50% całkowitej przestrzeni.źródło
Cóż, jeśli masz dokładnie 3 przyciski i jeśli ok (lub nawet planujesz), że zewnętrzne przyciski są wyrównane do lewej i prawej strony, możesz spróbować zastosować RelativeLayout, który jest mniej obciążony (w wielu sytuacjach).
Możesz użyć,
layout_alignParentBottom
aby wyrównać wszystkie przyciski z dolną częścią układu. Użyjlayout_alignParentLeft and Right
dla zewnętrznych przycisków ilayout_centerHorizontal
dla środkowego przycisku.Działa to dobrze w różnych orientacjach i rozmiarach ekranu.
źródło
Powinieneś spojrzeć na atrybut android: layout_weight
źródło
Nowoczesnym rozwiązaniem tego jest Flexbox .
Pamiętaj, aby zaimportować
implementation 'com.google.android:flexbox:2.0.0'
Flexbox
jest znacznie potężniejszy; jest dobrym uzupełnieniemConstraintLayout
. To świetny zasób, aby dowiedzieć się więcej.źródło
Aby równomiernie rozmieścić dwa przyciski w poziomym układzie liniowym, użyłem 3 obiektów LinearLayout, które działają jak przestrzenie, których rozmiar zostanie automatycznie zmieniony. Ustawiłem te obiekty LinearLayout w następujący sposób:
[] Przycisk 1 [] Przycisk 2 []
([] reprezentuje obiekt LinearLayout używany do odstępów)
następnie ustawiam wagi każdego z tych [] obiektów LinearLayout na 1 i otrzymuję równomiernie rozmieszczone przyciski.
Mam nadzieję że to pomoże.
źródło
w tym celu utworzyłem niestandardowy widok DistributeLayout .
źródło
Sugeruję użycie atrybutu weightSum LinearLayout.
Dodanie znacznika
android:weightSum="3"
do deklaracji xml LinearLayout, a następnieandroid:layout_weight="1"
do przycisków spowoduje równomierne rozmieszczenie 3 przycisków.źródło
Można to osiągnąć, przypisując
weight
do każdego przycisku dodanego w pojemniku, bardzo ważne, aby zdefiniować orientację poziomą:dzięki czemu możemy uzyskać to w naszym urządzeniu:
nawet jeśli
weight
obrócimy nasze urządzenie, zdefiniowane w każdym przycisku mogą równomiernie rozdzielić elementy wzdłuż pojemnika:źródło
Najlepszym rozwiązaniem jest użycie TableLayout z systemem Android: layout_width = "match_parent", aw kolumnach użycie Androida: layout_weight = "1" dla wszystkich kolumn
źródło
Powyższe odpowiedzi przy użyciu układu nie działały dla mnie, ale następujące zadziałały.
Tak to wygląda na ekranie,
źródło
Przede wszystkim odpowiedzi są poprawne, ale w przypadku, gdy potrzebujesz widocznych i nieistniejących funkcji, ta pragmatycznie metoda będzie działać dobrze
źródło
Dzieci o równej wadze
Aby działało to w
LinearLayout
grupie widoków, wartości atrybutówandroid:layout_width
iandroid:layout_height
muszą być równe"match_parent"
...źródło
W kole zakłada się, że Tom, Tim i Todd mają 3 centymetry. Jeśli chcesz, aby ekran dotykowy był w dół, ustaw go, gdy Tom i Tim przyjmą, że ma 1 centymetr, co oznacza, że łączą się wirtualnie, ale jego płaszczyzna 2D znajduje się na dole. Jest to wyświetlane na ekranie.
źródło
źródło
Najłatwiejszym i najszybszym (ale nie najlepszym) sposobem jest dodanie TextView z pustym atrybutem tekstowym, jak to
kolor tła musi być taki sam na LinearLayout, wtedy możesz użyć właściwości padding, jak to
lub cokolwiek potrzebujesz. Oto przykład.
źródło