Moje pytanie jest proste
Jak programowo ustawić moje przyciski layout_gravity?
Znalazłem to w Internecie, ale po prostu rzuca mi wyjątek Nullpointer:
Button MyButton = new Button(this);
LinearLayout.LayoutParams lllp=(LinearLayout.LayoutParams)MyButton.getLayoutParams();
lllp.gravity=Gravity.RIGHT;
MyButton.setLayoutParams(lllp);
MyLinearLayout.addView(MyButton);
Jakieś rozwiązanie?
android
android-layout
Adam Varhegyi
źródło
źródło
Odpowiedzi:
Jawa
Kotlin
Aby sprawdzić wartości grawitacji i jak ustawić grawitację, sprawdź grawitację .
Zasadniczo powinieneś wybrać
LayoutParams
zależnie od rodzica. Może to byćRelativeLayout
,LinearLayout
etc ...źródło
layout_gravity
(to znaczyLayoutParams.gravity
). Togravity
byłobybutton.setGravity()
setGravity()
jest to układ_grawitacji, ale to źle. Mogę potwierdzić, że ta odpowiedź jest poprawna dla programowego ustawienia układu_grawitacji.Nie chciałbym wskrzeszać starych wątków, ale to jest problem, na który nie ma poprawnej odpowiedzi, a ponadto sam na to wpadłem.
Oto długa kwestia, jeśli interesuje Cię tylko odpowiedź, przewiń do samego kodu:
Android: grawitacja i Android: układ_grawitacja działa inaczej. Oto artykuł, który przeczytałem, który mi pomógł.
GIST artykułu: grawitacja wpływa na widok po przypisaniu wysokości / szerokości. Tak więc środek ciężkości nie wpłynie na wykonany widok FILL_PARENT (pomyśl o tym jak o automatycznym marginesie). layout_gravity center BĘDZIE wpływać na widok FILL_PARENT (pomyśl o tym jak o automatycznej padzie).
Zasadniczo android: layout_gravity NIE MOŻNA uzyskać dostępu programowego, tylko android: grawitacja. W przypadku OP i moim przypadku zaakceptowana odpowiedź nie umieszcza przycisku pionowo w środku.
Aby poprawić odpowiedź Karthi:
Link do
LinearLayout.LayoutParams
.android: layout_gravity pokazuje „Brak powiązanych metod”, co oznacza, że nie można uzyskać dostępu programowego. Natomiast grawitacja jest polem w tej klasie.
źródło
Dla układu_grawitacja użyj odpowiedzi podanej przez „karthi”. Ta metoda ustawia grawitację, aby umieścić dzieci w widoku.
źródło
Miałem podobny problem z programowym ustawieniem układu_grawitacji na przyciskach w GridLayout.
Sztuczka polegała na ustawieniu grawitacji na układzie przycisków PARAMY PO dodaniu przycisku do elementu nadrzędnego (GridLayout), w przeciwnym razie grawitacja zostanie zignorowana .
źródło
Jeśli chcesz zmienić
layou_gravity
istniejący widok, wykonaj następujące czynności:Pamiętaj, aby użyć prawa
LayoutParams
na podstawie typu układu, w którym znajduje się Twój widok. Np .:źródło
użyj tego, aby dodać mor więcej niż jedną grawitację
źródło
To pytanie jest stare, ale właśnie miałem ten sam problem i rozwiązałem go w ten sposób
źródło
KOTLIN ustawia więcej niż jedną grawitację na FrameLayout bez zmiany rozmiaru:
źródło
Używam czegoś takiego: (Xamarin i kod C #)
SetGravity umieszcza mój textView na środku układu. Tak więc właściwość układu SetGravity odnosi się do zawartości układu
źródło
W razie potrzeby ustawienia Grawitacji dla widoku skorzystaj z następujących opcji
Aby ustawić układ_grawitacji dla przycisku, użyj pola grawitacji dla parametrów układu jako
wypróbuj tę nadzieję, że to wyjaśni dzięki
źródło
Pozostałe odpowiedzi są prawidłowe, chcę dodać więcej wyjaśnień. Układ_grawitacji dotyczy sposobu pozycjonowania widoku w widoku nadrzędnym.
Musisz ustawić grawitację ** po wywołaniu metody parentView.addView () **. Możemy zobaczyć kod:
Problem wskaźnika zerowego polega na tym, że nie wywołuje metody addView przed getLayoutParams ().
Adnotacja została już powiedziana: „Ta metoda może zwrócić wartość null, jeśli ten widok nie jest dołączony do nadrzędnej grupy ViewGroup lub {@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)} nie został pomyślnie wywołany. Gdy widok jest dołączony do elementu nadrzędnego ViewGroup, ta metoda nie może zwracać wartości null. ”
źródło
Jeśli chcesz umieścić widok na środku rodzica, możesz zrobić z następującym kodem.
te sekcje kodu powodują, że LinearLayout umieszcza pierwsze elementy widoku na środku elementu nadrzędnego. Dlatego system nie bierze pod uwagę początkowej szerokości i wysokości, aby ustawić widok w środku. Dobrze wykonuję sekcję kodu.
źródło
do RelativeLayout, wypróbuj ten kod, działa dla mnie:
yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
źródło
Doskonale działa !!! Żadna z powyższych odpowiedzi nie działa dla mnie. W pliku Xml ustawienie grawitacji i ustawienie layout_gravity jest inne. Sprawdź poniższy kod
Sprawdź także To, gdzie można znaleźć jasne wyjaśnienie dotyczące grawitacji i układu_grawitacji.
źródło
Większość powyższych odpowiedzi jest prawidłowa, więc napisałem metody pomocnicze, dzięki czemu możesz użyć ich bezpośrednio w swoim projekcie.
źródło
Przełączyłem się z LinearLayout.LayoutParams na RelativeLayout.LayoutParams, aby w końcu uzyskać pożądany rezultat w utworzonym przeze mnie niestandardowym widoku okręgu.
Ale zamiast grawitacji używasz addRule
RelativeLayout.LayoutParams mCircleParams = nowy RelativeLayout.LayoutParams (wysokość okręgu, wysokość okręgu);
źródło
Wypróbuj ten kod
lub
źródło
layout_gravity
niegravitiy
.źródło
źródło