Ich möchte einen Button unter a anzeigen ListView
. Problem ist, wenn die ListView
erweitert wird (Elemente hinzugefügt ...), wird die Schaltfläche aus dem Bildschirm gedrückt.
Ich habe es LinearLayout
mit Gewichten versucht (wie in Android vorgeschlagen: Warum gibt es kein maxHeight für eine Ansicht? ), Aber entweder habe ich die Gewichte falsch verstanden oder es hat einfach nicht funktioniert.
Außerdem habe ich irgendwo den Hinweis gefunden, a zu verwenden RelativeLayout
. Das ListView
würde dann über der Schaltfläche mit dem android:layout_above
Parameter eingestellt.
Das Problem dabei ist, dass ich nicht weiß, wie ich den Knopf danach positionieren soll. In dem Beispiel, das ich gefunden habe, wurde die Ansicht unter dem ListView
angepasst android:layout_alignParentBottom
, aber ich möchte nicht, dass meine Schaltfläche am unteren Bildschirmrand haftet.
Irgendwelche Ideen außer der Verwendung der setHeight-Methode und der Berechnung des benötigten Platzes?
Edit: Ich habe viele nützliche Antworten bekommen.
Die Lösung von bigstone & user639183 hat fast perfekt funktioniert. Ich musste jedoch einen zusätzlichen Abstand / Rand am unteren Rand der Schaltfläche hinzufügen, da dieser immer noch halb aus dem Bildschirm herausgeschoben wurde (aber dann gestoppt wurde).
Die Antwort von Adinia mit dem relativen Layout ist nur dann in Ordnung, wenn die Schaltfläche am unteren Bildschirmrand befestigt werden soll. Es ist nicht das, was ich beabsichtigt habe, könnte aber dennoch für andere nützlich sein.
Die Lösung von AngeloS war die, die ich am Ende gewählt habe, da sie nur die gewünschten Effekte erzeugt hat. Ich habe jedoch zwei geringfügige Änderungen an
LinearLayout
der Schaltfläche vorgenommen:Da ich keine absoluten Werte in meinem Layout haben wollte, wechselte ich
android:layout_height="45px"
zuwrap_content
, was auch gut funktioniert.Zweitens, da ich wollte, dass die Schaltfläche horizontal zentriert wird, was nur von vertikal unterstützt wird
LinearLayout
, habe ich android: orientierung = "horizontal" in "vertikal" geändert.
AngeloS erklärte in seinem ersten Beitrag auch, dass er nicht sicher sei, ob der
android:layout_weight="0.1"
Parameter in derLinearLayout
UmgebungListView
irgendeine Wirkung habe; Ich habe es gerade versucht und es tut es tatsächlich! Ohne wird die Taste wieder aus dem Bildschirm gedrückt.
quelle
android:layout_alignParentBottom="true"
. Möchten Sie jedoch klarstellen, dass die Schaltfläche am unteren Rand der ListView angezeigt wird, wenn nur wenige Elemente vorhanden sind? Wenn ja, sehen Sie, was Rich sagt.Antworten:
Ich hatte genau dieses Problem und um es zu lösen, habe ich zwei separate erstellt
LinearLayouts
, um dasListView
bzw.Button
unterzubringen. Von dort stecke ich beide in einen anderenLinear Layout
und setze den Containerandroid:orientation
aufvertical
. Ich habe auch das Gewicht des der eingestellt ,LinearLayout
dass die untergebrachtListView
zu ,0.1
aber ich weiß nicht , ob das einen Effekt hat. Von dort aus können Sie die Höhe des unteren Containers (mit Ihrer Schaltfläche) auf die gewünschte Höhe einstellen.EDIT das ist was ich meine:
Mit der obigen Lösung wird die Schaltfläche am unteren Bildschirmrand repariert.
Ändern Sie die Höhe von
ListView01
in, damit die Schaltfläche am Ende der Liste angezeigt wirdwrap_content
:quelle
<div
Tags in HTML. Es ist nur ein Wrapper und diese Lösung funktioniert definitiv.Ich habe dieses Problem im Code gelöst und die Höhe der Listenansicht nur festgelegt, wenn mehr als 5 Elemente enthalten sind:
Beachten Sie, dass ich die maximale Höhe auf das 5,5-fache der Höhe eines einzelnen Elements festgelegt habe, damit der Benutzer sicher weiß, dass ein gewisser Bildlauf erforderlich ist! :) :)
quelle
Bei Ihrer letzten Bearbeitung müssen Sie lediglich
android:layout_above="@+id/butt1"
Ihren ListView-Code hinzufügen .Und um Ihnen (und allen hier, die zuvor eine Antwort versucht haben) zu zeigen, dass Sie wirklich nicht mehr als eine verwenden müssen
RelativeLayout
, finden Sie hier Ihren korrigierten Code :und das Ergebnis unter Verwendung einer zufälligen Liste:
quelle
Stellen Sie
LinearLayout
mit die Höhe IhresListView
undButton
auf einwrap_content
und fügen Sie ein Gewicht = 1 hinzuListView
. Dies sollte funktionieren, wie Sie möchten.Und ja, setzen Sie
layout_gravity
dasButton
aufbottom
quelle
Es wurde ein Weg gefunden, dies ohne verschachtelte Container zu tun, inspiriert von der Lösung von AngeloS.
Ich habe eine
LinearLayout
mit vertikaler Ausrichtung verwendet, die eineListView
und eine Schaltfläche hat. Ich stelle dasandroid:layout_weight="0.1"
für dieListView
.Es schafft es, dass der Button immer am Ende der Liste bleibt. Und die Schaltfläche wird nicht vom Bildschirm gedrückt, wenn die Liste wächst.
quelle
android:layout_height="wrap_content"
funktioniert das LinearLayout wie in Ihrer Lösung perfekt, und zwar nicht nur in 4.4.3, sondern auch, da Sparkle es nicht erwähnt hat, habe ich esmatch_parent
zuvor versucht .RelativeLayout
ist eine Lösung, wenn Sie nicht möchten, dass die Schaltfläche zu nahe am unteren Rand bleibt, können Sie Ränder hinzufügen (das Auffüllen einer Schaltfläche würde sie beschädigen, da sie einen 9-Patch-Hintergrund verwendet und eine eigene Auffüllung festlegt).Es wäre dasselbe, wenn Sie a verwenden würden
LinearLayout
: Der Weg, um das zu erreichen, was Sie wollen, besteht darin, dasListView
auf eine Größe = 0 und ein Gewicht = 1 und für die Schaltfläche height = wrap_content und weight = 0 zu setzen.(Wenn Sie beide auf wrap_content setzen, wie user639183 sagte, wird die Höhe nicht begrenztListView
.)quelle
ListView
Höhe desSie können diese Funktion wahrscheinlich mit verschachtelten Containern ausführen. Möglicherweise müssen Sie den Button in einen zweiten (inneren) Container einwickeln, damit er mehr Platz beansprucht, und den Button einfach oben am inneren Container ausrichten.
Möglich so etwas:
RelativeLayout
-- Listenansicht
- RelativeLayout
---- Taste
Wenn Sie die verschiedenen Ausrichtungsoptionen für die beiden Container verwenden, sollten Sie in der Lage sein, dies zum Laufen zu bringen.
quelle
android:layout_marginTop="30dip"
für die Schaltfläche verwenden können, wenn Sie beispielsweise mehr Platz zwischen der Liste und der Schaltfläche wünschen.Dies ist der sauberste Weg, dies zu tun:
Es ähnelt der Lösung von Angelos, aber Sie benötigen kein lineares Layout, das die ListView einschließt. Sie können auch ein FrameLayout verwenden, das im Vergleich zu einem LinearLayout leichter ist, um die Schaltfläche einzuschließen.
quelle
Die Idee wird in den sehr guten Lösungen umrissen von:
Beide scheinen zumindest in Version 4.4.3 perfekt zu funktionieren.
Ich musste noch einige Zeit damit verbringen, Testcode zu schreiben, um ihn zu überprüfen und jede Methode zu bestätigen. Unten finden Sie den eigenständigen, minimalen Testcode, der erforderlich ist.
Das Layout basiert auf der Lösung von Sparkle, da es weniger verschachtelte Layouts enthält. Wurde auch aktualisiert, um die aktuellen LINT-Prüfungen widerzuspiegeln.
In der Aktivität wird der Boilerplate-Code bereitgestellt, um die Lösung selbst zu testen.
Fühlen Sie sich frei, hinzuzufügen oder zu verbessern, da dies "Community-Wiki" ist.
quelle
Versuchen Sie, RelativeLayout mit der Schaltfläche unten zu verwenden. Stellen Sie die Höhe des Layouts auf "wrap_content" ein. Ich habe es nicht versucht. Nur eine Idee
quelle
Fügen
android:layout_weight="1"
Sie in LinearLayout einfach ListView hinzuquelle
Folgendes hat bei mir funktioniert ...
Hinweis: Die params.width = ... muss auch festgelegt werden ...
Das obige Beispiel ist, wenn Sie TableRow und ListView in TableRow verwenden ...
quelle
Wrap-Inhalt in lineares Layout
in der Listenansicht hinzufügen: android: layout_weight = "1"
Stellen Sie in Ihrem Button eine feste Höhe ein
quelle
Wenn Sie möchten, dass der Inhalt unter der Listenansicht nach unten verschoben wird, wenn Elemente zur Liste hinzugefügt werden, versuchen Sie diese Lösung:
Fügen Sie am unteren Rand der Listenansicht einen positiven Abstand und am oberen Rand der "Fußzeile" einen negativen Abstand hinzu. Dies funktioniert in einem linearen Layout oder einem relativen Layout.
quelle
Da es kein MaxHeight-Attribut gibt, ist es am besten, entweder die Höhe der ListView auf einen festgelegten Wert festzulegen oder zu verwenden
wrap_content
.quelle
Ich habe dieses Problem gelöst, indem ich die ListView in eine ScrollView eingefügt habe. Lint hat es nicht gefallen, aber wenn ich ein minHeight hinzufüge und das fillViewport auf true setze, habe ich ein schönes Ergebnis.
quelle