Wiem, że możemy ustawić następujące wartości dla właściwości android:gravity
i android:layout_gravity
:
center
center_vertical
center_horizontal
itp.
Ale jestem zdezorientowany, jeśli chodzi o oba z nich.
Jaka jest różnica między użyciem android:gravity
a android:layout_gravity
?
android
android-layout
android-gravity
Paresh Mayani
źródło
źródło
ImageView
wydają się zachowywać inaczej niżTextView
.Odpowiedzi:
Ich imiona powinny ci pomóc:
android:gravity
ustawia grawitację zawartości (tj. jej widoków podrzędnych)View
używanego.android:layout_gravity
ustawia grawitacjęView
lubLayout
względem jego rodzica.I przykład jest tutaj .
źródło
layout_
definiuje coś, co wpływa na elementy na zewnątrz.android:gravity
zestaw zostanie ustawiony w lewo, a jego dzieciandroid:layout_gravity
ustawione w prawo? do której strony dzieci się dopasują?Wewnątrz zewnątrz
gravity
porządkuje zawartość w widoku.layout_gravity
ustawia pozycję widoku poza sobą.Czasami pomaga też zobaczyć zdjęcie. Są zielony i niebieski,
TextViews
a pozostałe dwa kolory tłaLinearLayouts
.Notatki
layout_gravity
Nie działa widokami wRelativeLayout
. Użyj go do wyświetlania w aLinearLayout
lubFrameLayout
. Zobacz moją dodatkową odpowiedź, aby uzyskać więcej informacji.gravity
nie będzie żadnego efektu. Tak więcwrap_content
igravity
są razem bez znaczenia.layout_gravity
nie będzie żadnego efektu. Tak więcmatch_parent
ilayout_gravity
są razem bez znaczenia.layout_gravity=center
Wygląda tak samo jaklayout_gravity=center_horizontal
tutaj, ponieważ są one w układzie pionowym liniowej. W tym przypadku nie można wyśrodkować w pionie, więc wyśrodkujlayout_gravity=center
tylko w poziomie.gravity
ilayout_gravity
widoków w układzie. Aby zobaczyć, co się stanie po ustawieniugravity
samego układu macierzystego, sprawdź dodatkową odpowiedź , o której wspomniałem powyżej. (Podsumowanie:gravity
nie działa dobrze na,RelativeLayout
ale może być przydatne w przypadkuLinearLayout
.)Pamiętaj więc, że układ _grawitacja porządkuje widok w swoim układzie . Grawitacja porządkuje zawartość w widoku.
xml
Oto xml dla powyższego obrazu w celach informacyjnych:
Związane z
źródło
Różnica
android:layout_gravity
jest zewnętrzną grawitacją widoku. Określa kierunek, w którym widok powinien dotykać granicy jego rodzica.android:gravity
to grawitacja wewnętrzna tego widoku. Określa kierunek, w którym jego zawartość powinna być wyrównana.Odpowiedniki HTML / CSS
Prosta sztuczka, która pomoże Ci zapamiętać
Przyjmij
layout-gravity
jako „grawitację zewnętrzną”.źródło
Krótka odpowiedź: użyj
android:gravity
lubsetGravity()
do kontroli grawitacji wszystkich widoków podrzędnych kontenera; używaćandroid:layout_gravity
lubsetLayoutParams()
kontrolować grawitację pojedynczego widoku w pojemniku.Długa historia: aby kontrolować grawitację w kontenerze o układzie liniowym, takim jak
LinearLayout
lubRadioGroup
, istnieją dwa podejścia:1) Aby kontrolować grawitację WSZYSTKICH widoków podrzędnych
LinearLayout
kontenera (tak jak w książce), użyjandroid:gravity
(nieandroid:layout_gravity
) w pliku XML układu lubsetGravity()
metody w kodzie.2) Aby kontrolować grawitację widoku potomnego w jego kontenerze, użyj
android:layout_gravity
atrybutu XML. W kodzie należy uzyskaćLinearLayout.LayoutParams
widok i ustawić jego grawitację. Oto przykład kodu, który ustawia przycisk na dole w poziomo zorientowanym kontenerze:W przypadku
LinearLayout
kontenera poziomego grawitacja pozioma jego widoku potomnego jest wyrównana do lewej jeden po drugim i nie można go zmienić. Ustawienieandroid:layout_gravity
nacenter_horizontal
nie ma wpływu. Domyślna grawitacja pionowa to środek (lub środek_werkalny) i można ją zmienić na górną lub dolną. W rzeczywistościlayout_gravity
wartością domyślną jest,-1
ale Android ustawia ją w pozycji środkowej w pionie.Aby zmienić poziome pozycje widoków potomnych w poziomym pojemniku liniowym, można użyć
layout_weight
marginesu i wypełnienia widoku potomnego.Podobnie w przypadku pionowego kontenera grupy widoków, pionowy ciężar jego widoku potomnego jest wyrównany do góry jeden pod drugim i nie można go zmienić. Domyślna grawitacja pozioma to środek (lub
center_horizontal
) i można ją zmienić w lewo lub w prawo.W rzeczywistości widok potomny, taki jak przycisk, ma również
android:gravity
atrybut XML isetGravity()
metodę kontrolowania jego widoków potomnych - tekstu w nim.Button.setGravity(int)
Jest związana z tym wejściem developer.android.com .źródło
Z tego, co mogę zebrać, układ_grawitacja jest grawitacją tego widoku wewnątrz jego rodzica, a grawitacja jest grawitacją dzieci w tym widoku.
Myślę, że to prawda, ale najlepszym sposobem, aby się tego dowiedzieć, jest zabawa.
źródło
Spójrz na zdjęcie, aby wyraźnie określić grawitację
źródło
Jeśli chcemy ustawić grawitację zawartości w widoku, użyjemy „android: grawitacja”, a jeśli chcemy ustawić grawitację tego widoku (jako całości) w jego widoku nadrzędnym, użyjemy „android: układ_grawitacji ”.
źródło
Pomyślałem, że dodam tutaj moje własne wyjaśnienie - wywodząc się z tła na iOS, w ten sposób zinternalizowałem je w terminach iOS: „Układ grawitacji” wpływa na twoją pozycję w superwizji. „Grawitacja” wpływa na pozycję twoich podstron w tobie. Mówiąc inaczej, układ grawitacji pozycjonuje ciebie, podczas gdy grawitacja pozycjonuje twoje dzieci.
źródło
Istnieje wiele różnic w
gravity
ilayout-gravity
. Wyjaśnię moje doświadczenie na temat tych 2 pojęć ( wszystkie informacje, które otrzymałem dzięki mojej obserwacji i niektórym stronom internetowym ).Uwaga:-
Grawitacja jest używana w widoku zawartości, ponieważ niektórzy użytkownicy mają odpowiedź i jest taka sama dla wszystkich
ViewGroup Layout
.Layout-gravity
jest używany z widokiem nadrzędnym, ponieważ niektórzy użytkownicy mają odpowiedź.Gravity and Layout-gravity
jest praca bardziej przydatna dlaFrameLayout
dzieci.We can't use Gravity and Layout-gravity
w znaczniku FrameLayout ....Możemy ustawić Widok dziecka w dowolnym miejscu w
FrameLayout
użyciulayout-gravity
.Możemy wykorzystać każdą pojedynczą wartość grawitacji wewnątrz FrameLayout (np: -
center_vertical
,center_horizontal
,center
,top
itp), ale nie jest to możliwe z innych układów ViewGroup.FrameLayout
w pełni działaLayout-gravity
. Przykład: - Jeśli pracujeszFrameLayout
, nie musisz zmieniać całego Układu, aby dodać nowy Widok. Po prostu dodajesz View jako ostatni wFrameLayout
i dajesz muLayout-gravity
wartość ( jest to zaleta grawitacji układu dzięki FrameLayout ).Wynik:-
Gravity
działając tak samo jak powyżej, ale tutaj jest różnica, że możemy użyć grawitacji wewnątrzLinearLayout View
iRelativeLayout View
co nie jest możliwe wFrameLayout View
.Uwaga: - Tutaj możemy ustawić tylko 3 wartości
layout_gravity
tego (left
|right
|center
(również nazywanecenter_horizontal
)).Wynik:-
Uwaga: - Tutaj możemy ustawić również 3 wartości
layout_gravity
tego ((top
|bottom
|center
(również nazywanecenter_vertical
)).wynik:-
Uwaga: - Nie możemy użyć
layout_gravity
w,RelativeLayout Views
ale możemygravity
ustawićRelativeLayout
dziecko w tej samej pozycji ....źródło
textColor
we wszystkich ustawisz bielview
, byłoby to bardzo świetne. : DŁatwą sztuczką do zapamiętania jest to, że grawitacja dotyczy nas wewnątrz Ziemi. Tak,
android:gravity
jest na środku widoku.Rememeber na out w świeckich out _gravity które pomogą Ci pamiętać, że
android:layout_gravity
odsyła do zewnątrz widokuźródło
Coś, co zobaczyłem na blogu Sandip, którego prawie przegapiłem, naprawiło mój problem. Powiedział, że
layout_gravity
NIE PRACUJELinearLayout
.Jeśli używasz A,
LinearLayout
a ustawienia grawitacji doprowadzają Cię do szału (jak ja), przełącz się na coś innego.Właściwie przełączyłem się na
RelativeLayout
używany wtedylayout_alignParentLeft
ilayout_alignParentRight
na 2 zawarteTextView
s, aby uzyskać je w jednej linii, aby przejść daleko w lewo i daleko w prawo.źródło
Podstawowa różnica między nimi polega na tym, że-
android: grawitacja jest używana w elementach potomnych widoku.
android: układ_grawitacja jest używany dla tego elementu w odniesieniu do widoku rodzica.
źródło
android:gravity
służy do określania sposobu umieszczenia zawartości obiektu w samym obiekcie. Innymi słowy, android: grawitacja służy do określenia grawitacji zawartości widoku.android:layout_gravity
to atrybucja, którą dziecko może podać swojemu rodzicowi, aby określić wagę widoku w jego rodzicach.Aby uzyskać więcej informacji, możesz odwiedzić
źródło
Grawitacja: pozwala przenosić zawartość wewnątrz kontenera. (Jak zostaną umieszczone widoki podrzędne).
Ważne: (PRZENIEŚ wzdłuż osi X lub osi Y w dostępnej przestrzeni).
Przykład: załóżmy, że jeśli chcesz pracować z LinearLayout (Height: match_parent, Width: match_parent) jako elementem na poziomie katalogu głównego, to będziesz mieć pełną przestrzeń na klatkę; a widoki potomne mówią, że 2 TextViews (Height: wrap_content, Width: wrap_content) wewnątrz LinearLayout można przesuwać wzdłuż osi x / y przy użyciu odpowiednich wartości grawitacji na obiekcie nadrzędnym.
Layout_Gravity: Pozwala na przesłonięcie nadrzędnego zachowania grawitacyjnego TYLKO wzdłuż osi x.
Ważne: (PRZESUŃ [przesłonięcie] wzdłuż osi X w dostępnym miejscu).
Przykład: jeśli pamiętasz o poprzednim przykładzie, wiemy, że grawitacja umożliwiła nam poruszanie się wzdłuż osi x / y, tj. miejsce TextViews wewnątrz LinearLayout. Powiedzmy, że LinearLayout określa grawitację: środek; co oznacza, że każdy TextView musi być wyśrodkowany zarówno pionowo, jak i poziomo. Teraz, jeśli chcemy, aby jeden z TextView przesuwał się w lewo / w prawo, możemy przesłonić określone zachowanie grawitacyjne za pomocą layout_gravity w TextView.
Premia: jeśli zagłębisz się głębiej, przekonasz się, że tekst w TextView działa jako pod-widok; więc jeśli zastosujesz grawitację w TextView, tekst wewnątrz TextView będzie się poruszał. (dotyczy to również całej koncepcji)
źródło
Grawitacja służy do ustawiania wyrównania tekstu w widokach, ale układ_grawitacja służy do ustawiania widoków samodzielnie. Weźmy przykład, jeśli chcesz wyrównać tekst napisany w editText, a następnie użyć grawitacji i chcesz wyrównać ten editText lub dowolny przycisk lub dowolny widok, a następnie użyj layout_gravity, więc jest to bardzo proste.
źródło
grawitacja : służy do prostych widoków, takich jak podgląd tekstu, edycja tekstu itp.
layout_gravity : służy do bieżącego widoku tylko grawitacji w kontekście jego względnego widoku macierzystego, takiego jak układ liniowy lub FrameLayout, aby uzyskać widok w środku lub inną grawitację jego rodzica.
źródło
służy do dostosowania zawartości widoku względem jego określonej pozycji (przydzielonego obszaru).
android:gravity="left"
nie zrobiłby nic, jeślilayout_width
jest równy"wrap_content"
służy do wyświetlania samego względem pliku nadrzędnego lub pliku układu.
źródło
android:gravity
-> Ustawia grawitację zawartości widoku, na którym jest używany.android:layout_gravity
-> Ustawia grawitację widoku rodzica lub układuźródło
grawitacja - dotyczy własnego widoku.
layout-gravity --- Dotyczy widoku związanego z jego rodzica.
źródło
android:gravity
Określa właściwy (pozycja) z dziećmi, natomiast wandroid:layout_gravity
ustawia położenie samego widzenia. Mam nadzieję, że to pomożeźródło