W porządku, ten konkretny układ po prostu mnie denerwuje. Wydaje się, że nie mogę znaleźć sposobu na utworzenie listView, z rzędem przycisków u dołu, tak aby widok listy nie rozciągał się na górę przycisków, a zatem przyciski są zawsze przyciągane do dołu ekranu. Oto, czego chcę:
usunięto martwy link do ImageShack
Wydaje się, że powinno to być takie łatwe, ale wszystko, czego próbowałem, zawiodło. Jakaś pomoc?
Oto mój obecny kod:
RelativeLayout container = new RelativeLayout(this);
container.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
//** Add LinearLayout with button(s)
LinearLayout buttons = new LinearLayout(this);
RelativeLayout.LayoutParams bottomNavParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
bottomNavParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
bottomNavParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
buttons.setLayoutParams(bottomNavParams);
ImageButton newLayer = new ImageButton(this);
newLayer.setImageResource(R.drawable.newlayer);
newLayer.setLayoutParams(new LinearLayout.LayoutParams(45, LayoutParams.FILL_PARENT));
buttons.addView(newLayer);
container.addView(buttons);
//** Add ListView
layerview = new ListView(this);
RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
listParams.addRule(RelativeLayout.ABOVE, buttons.getId());
layerview.setLayoutParams(listParams);
container.addView(layerview);
Odpowiedzi:
Myślę, że właśnie tego szukasz.
źródło
android:layout_above="@id/testbutton"
zachowaListView
powyższeButton
.addRule(RelativeLayout.ABOVE)
na zasadzieRelativeLayout
, albo. Wołasz to naRelativeLayout.LayoutParams
. Następnie dodajeszListView
doRelativeLayout
, dostarczając toRelativeLayout.LayoutParams
. Proszę rozważyć przejście na XML i zawyżenie go, aby zapewnić długoterminową konserwację.Miałem ten sam problem od wieków.
Rozwiązaniem pozwalającym zachować ListView nad przyciskami, ale zapobiegając zakrywaniu ich, gdy lista jest długa, jest ustawienie android: layout_weight = "1.0" w ListView. Pozostaw element layout_weight na przyciskach nieustawiony, aby zachowały swój naturalny rozmiar, w przeciwnym razie przyciski zostaną przeskalowane. Działa to z LinearLayout.
Przykład w Android ApiDemos: ApiDemos / res / layout / linear_layout_9.xml
źródło
Właśnie szukałem odpowiedzi na to pytanie i był to jeden z pierwszych wyników. Wydaje mi się, że wszystkie odpowiedzi, w tym ta, która jest obecnie wybrana jako „najlepsza odpowiedź”, nie odnoszą się do zadawanego pytania. Problem, o którym mowa, polega na tym, że dwa składniki nakładają się na siebie
Button
iListView
że ListView zajmuje cały ekran, a Button wizualnie unosi się nad (przed) ListView (blokuje widok / dostęp do ostatniego pozycja wListView
)Na podstawie odpowiedzi, które widziałem tutaj i na innych forach, w końcu doszedłem do wniosku, jak rozwiązać ten problem.
Pierwotnie miałem:
Zwróć uwagę na użycie
RelativeLayout
jako węzła głównego.To jest ostateczna, działająca wersja, w której Button nie zachodzi na
ListView
:Są tylko dwie różnice. Najpierw przeszedłem na używanie
LinearLayout
. Pomoże to w następnym kawałku, który był dodawanyandroid:layout_weight
do mojegoListView
Mam nadzieję, że to pomoże.
źródło
android:layout_alignParentBottom
wewnątrzLinearLayout
rodzica, ADT mówi „Nieprawidłowy parametr układu w LinearLayout: layout_alignParentBottom”!Najlepszym sposobem jest względny układ, który ustawia przyciski poniżej widoku listy. W tym przykładzie przyciski są również w układzie liniowym, ponieważ łatwiej jest umieścić je obok siebie w jednakowej wielkości.
źródło
Wiem, że ten post jest dość stary, ale aby odpowiedzieć na pytanie pierwotnego autora, kod nie zadziałał to buttons.getId () zwraca -1. Jeśli zamierzasz to zrobić, musisz ustawić coś takiego jak call buttons.setId (10). Jeśli to zrobisz, kod działa dobrze.
źródło
to powinno działać. aby przyciski znajdowały się również nad widokiem listy, umieść je w innym układzie liniowym.
źródło
najłatwiejszym rozwiązaniem byłoby utworzenie dwóch układów liniowych, jednego z przyciskiem, a drugiego z widokiem listy (Zawijaj zawartość na wysokości przycisku i dopasuj do rodzica na wysokości układu listy). wtedy tylko przewiń widok układu z widokiem listy, a układ przycisków zostanie zignorowany. Mam nadzieję, że to pomoże, przepraszam, że nie miałem ochoty pisać kodu.
źródło