Próbuję dynamicznie tworzyć TableRow
obiekty i dodawać je do pliku TableLayout
. Te TableRow
obiekty znajdują się 2 elementy, A TextView
i CheckBox
. Przedmioty TextView
muszą mieć ustawioną wagę układu na 1, aby przesunąć CheckBox
je w prawą stronę.
Nie mogę znaleźć dokumentacji, jak programowo ustawić wagę układu TextView
elementu.
TextView tv = (TextView) findViewById(R.id.your_textview_inside_the_linearlayout); tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.1f));
TableRow.LayoutParams
należy użyć zamiastTableLayout.LayoutParams
. Zobacz odpowiedź @ Dorje.Odpowiedź jest taka, że musisz użyć TableRow.LayoutParams, a nie LinearLayout.LayoutParams lub dowolnego innego LayoutParams.
Różne LayoutParams nie są wymienne, a jeśli użyjesz niewłaściwego, nic się nie wydarzy. Element nadrzędny widoku tekstowego jest wierszem tabeli, stąd:
http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
źródło
LayoutParams
TableRow.LayoutParams
wykonał też tę pracę dla mnieWe wcześniejszych odpowiedziach waga jest przekazywana do konstruktora nowego obiektu SomeLayoutType.LayoutParams. Nadal w wielu przypadkach wygodniej jest korzystać z istniejących obiektów - pomaga to uniknąć zajmowania się parametrami, którymi nie jesteśmy zainteresowani.
Przykład:
źródło
1f oznacza jako wagę = 1; możesz podać 2f lub 3f, widoki zostaną przeniesione zgodnie z przestrzenią
źródło
po prostu ustaw parametry układu w tym układzie, np
utwórz zmienną param
1f jest zmienną wagową
ustaw swój widget lub układ jak
źródło
LinearLayout.LayoutParams
konstruktora. Trzeci parametr to waga. Lub dokumentacja(LUB)
1f określa się jako wagę = 1; w zależności od potrzeb możesz podać 2f lub 3f, widoki zostaną przeniesione zgodnie z przestrzenią. Aby określić określoną odległość między widokami w układzie liniowym, użyj parametru weights dla „LinearLayout”.
źródło
To powinno ci działać
źródło
Możesz również podać wagę osobno w ten sposób,
źródło
To działa dla mnie i mam nadzieję, że zadziała również dla ciebie
Najpierw ustaw LayoutParams dla widoku nadrzędnego:
następnie ustaw dla TextView (dziecko):
źródło
Jest na to inny sposób. Jeśli musisz ustawić tylko jeden parametr, na przykład „wysokość”:
źródło
Po 4 godzinach walki. Wreszcie ten kod działał dla mnie.
3 kolumny są w jednym rzędzie.
źródło
Miałem sporo trudności z rozwiązaniem czegoś bardzo podobnego do tego: próbowałem mieć dwa przyciski w TableRow, z których każdy ma połowę szerokości ekranu. Z jakiegokolwiek powodu lewy przycisk zawsze będzie miał około 70% szerokości, a prawy przycisk 30%. Wywołanie table_layout.setStretchAllColumns (true) nie przyniosło żadnego efektu, ani nie ustawiono szerokości przycisku na połowę ekranu, ani nie ustawiono wagi jego układu.
Rozwiązanie skończyło się było zagnieżdżenie się LinearLayout w TableRows, które nie biorą pod uwagę wartość szerokości przyciskom:.
źródło
layout_width=fill_parent
, a po wykonaniu tej czynności ustawićlayout_weight=1
zarówno dla button1, jak i button2. Wszystkie elementy z fill_parent i layout_weight = 1 otrzymają równy rozmiar po nadmuchaniu.