Jak mogę ustawić wartość atrybutu layout_weight
przycisku w systemie Android dynamicznie z kodu Java?
245
Jak mogę ustawić wartość atrybutu layout_weight
przycisku w systemie Android dynamicznie z kodu Java?
Odpowiedzi:
Możesz przekazać go jako część
LinearLayout.LayoutParams
konstruktora:Ostatnim parametrem jest waga.
źródło
param = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, (float) 1.0);
1f
jeśli nie ma miejsc po przecinkuRelative
Użyj
LinearLayout.LayoutParams
:EDYCJA: Ach, odpowiedź Ericha jest łatwiejsza!
źródło
FILL_PARENT
został wycofany iMATCH_PARENT
należy go użyć zamiast tego.MATCH_PARENT
możesz go używać zamiastFILL_PARENT
nawet na starszych urządzeniach.FILL_PARENT
vs.MATCH_PARENT
.Jeśli już zdefiniowałeś swój widok w pliku układu (xml), chcesz tylko programowo zmienić wagę, ten sposób jest lepszy
nowy a LayoutParams nadpisuje inne parametry zdefiniowane w pliku xml, takie jak marginesy, lub musisz określić je wszystkie w LayoutParams.
źródło
Jeśli konstruktor o szerokości, wysokości i wadze nie działa, spróbuj użyć konstruktora o szerokości i wysokości. A następnie ręcznie ustaw wagę.
A jeśli chcesz, aby szerokość była ustawiona zgodnie z wagą, ustaw szerokość w konstruktorze na 0. To samo dotyczy wysokości. Poniższy kod działa dla mnie.
źródło
Jeśli ktoś szuka odpowiedzi, użyj tego:
Jeśli inicjujesz układ z pliku xml, będzie to o wiele wygodniejsze niż zapewnienie nowych parametrów układu dla układu liniowego.
źródło
layout_weight
został już ułożony, musisz zadzwonić,View.requestLayout()
aby zaktualizować.Każda z
LinearLayout.LayoutParams
iTableLayout.LayoutParams
pracował dla mnie, dla przycisków słuszna jestTableRow.LayoutParams
. To jest:O używaniu
MATCH_PARENT
lubWRAP_CONTENT
byciu tym samym.źródło
FILL_PARENT
został wycofany iMATCH_PARENT
należy go użyć zamiast tego.LayoutParams
do bezpośredniego rodzica. Zakładam, że miałeś awarię, próbując użyćLinearLayout.LayoutParams
bez rodzicaLinearLayout
.Jeśli już zdefiniowałeś swój widok w pliku układu (xml) i chcesz jedynie zmienić gramatykę pro gramatycznie, to utworzenie nowego LayoutParams nadpisze inne parametry zdefiniowane w pliku xml.
Więc najpierw powinieneś użyć „getLayoutParams”, a następnie setLayoutParams
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mButton.getLayoutParams(); params.weight = 4f; mButton.setLayoutParams(params);
źródło
Jeśli
layoutparams
jest już zdefiniowany (w formacie XML lub dynamicznie), oto jeden linijka:źródło
Korzystając z Kotlin, możesz zrobić coś takiego:
źródło