Okay, dieses spezielle Layout nervt mich nur. Und es scheint nicht möglich zu sein, eine Listenansicht mit einer Reihe von Schaltflächen am unteren Rand zu finden, damit die Listenansicht nicht über die Schaltflächen hinausragt und die Schaltflächen immer am unteren Bildschirmrand ausgerichtet sind. Folgendes möchte ich:
Der tote ImageShack-Link wurde entfernt
Es scheint so einfach zu sein, aber alles, was ich versucht habe, ist fehlgeschlagen. Irgendeine Hilfe?
Hier ist mein aktueller Code:
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);
Antworten:
Ich denke, das ist es, wonach Sie suchen.
quelle
android:layout_above="@id/testbutton"
wird dieListView
oben genannten behaltenButton
.addRule(RelativeLayout.ABOVE)
anRelativeLayout
. Sie nennen es auf einemRelativeLayout.LayoutParams
. Sie fügen dann dieListView
zu demRelativeLayout
, dass VersorgungRelativeLayout.LayoutParams
. Bitte denken Sie daran, auf XML umzusteigen und es aufzublasen, um eine langfristige Wartbarkeit zu gewährleisten.Ich hatte seit Ewigkeiten das gleiche Problem.
Die Lösung, um die ListView über den Schaltflächen zu halten, aber zu verhindern, dass sie bei langer Liste verdeckt wird, besteht darin, android: layout_weight = "1.0" in der ListView festzulegen. Lassen Sie das layout_weight auf den Schaltflächen deaktiviert, damit sie ihre natürliche Größe beibehalten. Andernfalls werden die Schaltflächen skaliert. Dies funktioniert mit LinearLayout.
In Android ApiDemos gibt es ein Beispiel: ApiDemos / res / layout / linear_layout_9.xml
quelle
Ich habe nur nach einer Antwort auf diese Frage gesucht und dies war eines der ersten Ergebnisse. Ich habe das Gefühl, dass alle Antworten, einschließlich derjenigen, die derzeit als "beste Antwort" ausgewählt wird, das angesprochene Problem nicht ansprechen. Das Problem, das angegeben wird, besteht darin, dass es eine Überlappung der beiden Komponenten gibt
Button
undListView
dass die ListView den gesamten Bildschirm einnimmt und die Schaltfläche visuell über (vor) der ListView schwebt (Blockieren der Ansicht / des Zugriffs der letzten) Artikel in derListView
)Basierend auf den Antworten, die ich hier und in anderen Foren gesehen habe, bin ich schließlich zu einem Schluss gekommen, wie ich das lösen kann.
Ursprünglich hatte ich:
Beachten Sie die Verwendung von
RelativeLayout
als Wurzelknoten.Dies ist die endgültige, funktionierende Version, in der der Button nicht überlappt
ListView
:Es gibt nur zwei Unterschiede. Zuerst habe ich auf a umgestellt
LinearLayout
. Dies wird beim nächsten Bit helfen, dasandroid:layout_weight
zu meinem hinzugefügt wurdeListView
Ich hoffe das hilft.
quelle
android:layout_alignParentBottom
innerhalb einesLinearLayout
übergeordneten Elements angeben, sagt ADT "Ungültiger Layoutparameter in einem LinearLayout: layout_alignParentBottom"!Der beste Weg ist ein relatives Layout, mit dem die Schaltflächen unter der Listenansicht festgelegt werden. In diesem Beispiel sind die Schaltflächen auch linear angeordnet, da es einfacher ist, sie gleich groß nebeneinander zu platzieren.
quelle
Ich weiß, dass dieser Beitrag ziemlich alt ist, aber um die Frage des Originalplakats zu beantworten, war der Grund, warum der Code nicht funktionierte, button.getId () gibt -1 zurück. Wenn Sie dies tun möchten, müssen Sie so etwas wie call button.setId (10) festlegen. Wenn Sie das tun, funktioniert der Code einwandfrei.
quelle
das sollte funktionieren. Um Schaltflächen auch über der Listenansicht zu haben, platzieren Sie die Schaltflächen in einem anderen linearen Layout.
quelle
Die einfachste Lösung wäre, zwei lineare Layouts zu erstellen, eines mit der Schaltfläche und das andere mit der Listenansicht (Inhalt auf der Schaltflächenhöhe umbrechen und übergeordnetes Element auf der Listenlayouthöhe abgleichen). Erstellen Sie dann nur eine Bildlaufansicht über das Layout mit der Listenansicht, und das Schaltflächenlayout wird ignoriert. Ich hoffe, es hilft, tut mir leid, ich hatte keine Lust, den Code zu schreiben.
quelle