Wie das aussieht, steht links und wie es aussehen soll, steht rechts.
Die offensichtliche Antwort ist, TextView auf fill_parent on height zu setzen, aber das führt dazu, dass kein Platz mehr für die Schaltfläche oder das Eingabefeld übrig bleibt.
Im Wesentlichen besteht das Problem darin, dass ich möchte, dass die Schaltfläche „Senden“ und der Texteintrag unten eine feste Höhe haben und die Textansicht den Rest des Raums ausfüllt. In ähnlicher Weise möchte ich im horizontalen linearen Layout, dass die Schaltfläche „Senden“ ihren Inhalt umschließt und der Texteintrag den Rest des Raums ausfüllt.
Wenn das erste Element in einem linearen Layout fill_parent mitgeteilt wird, tut es genau das und lässt keinen Platz für andere Elemente. Wie bekomme ich ein Element, das sich zuerst in einem linearen Layout befindet, um den gesamten Platz auszufüllen, abgesehen von dem Minimum, das für die restlichen Elemente im Layout erforderlich ist?
@oneself Paint 😉 Ich verwende einen Skin auf dem Emulator, allerdings mit freundlicher Genehmigung von Tea Vui Huang teavuihuang.com/android
– gav
24. April 2011 um 10:20 Uhr
+1 für das Posten des Layout-XML, das es gelöst hat. Hat mir geholfen herauszufinden, was mit mir nicht stimmt.
– Heuler
29. Februar 2012 um 19:23 Uhr
Janusz
Der moderne Weg, dies zu tun, besteht darin, a zu haben ConstraintLayout und beschränken Sie den unteren Rand der Ansicht auf den unteren Rand des ConstraintLayout mit app:layout_constraintBottom_toBottomOf="parent"
Das folgende Beispiel erstellt einen FloatingActionButton, der am Ende und am unteren Rand des Bildschirms ausgerichtet wird.
Als Referenz werde ich meine alte Antwort behalten.
Vor der Einführung von ConstraintLayout war die Antwort a relative Anordnung.
Wenn Sie ein relatives Layout haben, das den gesamten Bildschirm ausfüllt, sollten Sie es verwenden können android:layout_alignParentBottom um die Schaltfläche an den unteren Rand des Bildschirms zu verschieben.
Wenn Ihre Ansichten unten nicht in einem relativen Layout angezeigt werden, nimmt das Layout darüber möglicherweise den gesamten Platz ein. In diesem Fall können Sie die Ansicht, die ganz unten sein soll, zuerst in Ihre Layoutdatei legen und den Rest des Layouts mit über den Ansichten positionieren android:layout_above. Dadurch nimmt die Ansicht von unten so viel Platz ein, wie sie benötigt, und der Rest des Layouts kann den gesamten Bildschirm ausfüllen.
FYI: Das würde in einem ScrollView nicht funktionieren. Das ist das Problem, mit dem ich jetzt konfrontiert bin. Siehe stackoverflow.com/questions/3126347/…
– IgorGanapolsky
23. Mai 2012 um 0:40 Uhr
Das ist richtig, ScrollViews und Relative Layouts passen nicht sehr gut zusammen. Wenn Sie zu viel Inhalt haben, um alles auf einer Seite anzuzeigen, verwenden Sie einfach ein lineares Layout und fügen Sie die Ansicht von unten zuletzt ein. Wenn Sie möchten, dass die Ansicht auf kleinen Bildschirmen zuletzt in der Bildlaufansicht und auf größeren Telefonen unten auf der Seite angezeigt wird, sollten Sie die Verwendung unterschiedlicher Layoutdateien in Betracht ziehen und Ressourcenqualifizierer verwenden, damit das Gerät die richtige Layoutdatei auswählen kann.
– Janusz
23. Mai 2012 um 7:46 Uhr
ok .. was soll der zweite Absatz der Antwort hier? “Sie sollten zuerst ein Layout finden, das den unteren Bildschirmrand abdeckt”? dann sollten wir layout_alignParentBottom innerhalb des Layouts verwenden? Was brauchen wir android:layout_above zum?
– Eugen
7. Juli 2013 um 12:52 Uhr
Sie brauchen das Obige, wenn Sie so etwas wie eine Leiste unten und dann ein LinearLayout über dieser Leiste haben möchten, das sich vom oberen Bildschirmrand bis zur Leiste erstreckt.
– Janusz
18. Oktober 2014 um 10:45 Uhr
Ich habe in einem von “Android Weekly” gelesen that RelativeLayout ist speicherintensiv und sollte nach Möglichkeit vermieden werden.
– Tomasz Mularczyk
27. Juni 2015 um 19:11 Uhr
Bram Avontuur
In einem ScrollView das geht nicht, da die RelativeLayout würde sich dann überschneiden, was auch immer in der ist ScrollView am Ende der Seite.
Ich habe es mit einem dynamischen Stretching behoben FrameLayout :
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<!-- content goes here -->
<!-- stretching frame layout, using layout_weight -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<!-- content fixated to the bottom of the screen -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- your bottom content -->
</LinearLayout>
</LinearLayout>
</ScrollView>
das ist großartig – außerdem ist es “minimal invasiv” und intuitiver als der RelativeLayout-Ansatz. Ich würde mehr als eine positive Stimme geben, wenn ich könnte!
– menschlich
30. August 2011 um 12:31 Uhr
Ich verwende Ihre Lösung in meiner Anwendung, aber in meinem Fall möchte ich, dass die Schaltflächen am unteren Rand des Bildschirms (hinter der Tastatur) bleiben, wenn die Tastatur angezeigt wird. Gibt es eine Lösung dafür? Danke.
– Yoann
19. Januar 2012 um 16:02 Uhr
@DoubleYo: im Manifest android:windowSoftInputMode=”adjustPan”
– nsp
13. Juli 2012 um 12:56 Uhr
Wenn Sie möchten, dass der Boden dauerhaft befestigt wird, sodass er ständig angezeigt wird, funktioniert dies nicht. Ansonsten funktioniert es.
– basiskarl
2. November 2012 um 17:06 Uhr
pseudosudo
Sie können Ihr ursprüngliches lineares Layout beibehalten, indem Sie das relative Layout innerhalb des linearen Layouts verschachteln:
Dies ist ein chaotischer Ansatz, da er nicht sehr modular ist. Sie sollten keine überlappenden Layouts haben. Dieses Design funktioniert nicht, sobald Sie den Hintergrund des RelativeLayout ändern oder eine der Ansichten vergrößern oder Ansichten hinzufügen möchten.
– Patrick
18. Juni 2015 um 1:21 Uhr
Die obige Antwort (von Janusz) ist ganz richtig, aber ich persönlich fühle mich mit RelativeLayouts nicht 100% wohl, daher ziehe ich es vor, eine “füllende”, leere TextView einzuführen, wie diese:
vor dem Element, das sich am unteren Bildschirmrand befinden sollte.
Schlüsselbiene
Sie können dies auch mit einem LinearLayout oder einem ScrollView tun. Manchmal ist es einfacher zu implementieren als ein RelativeLayout. Sie müssen lediglich die folgende Ansicht hinzufügen Vor die Ansichten, die Sie am unteren Rand des Bildschirms ausrichten möchten:
@oneself Paint 😉 Ich verwende einen Skin auf dem Emulator, allerdings mit freundlicher Genehmigung von Tea Vui Huang teavuihuang.com/android
– gav
24. April 2011 um 10:20 Uhr
+1 für das Posten des Layout-XML, das es gelöst hat. Hat mir geholfen herauszufinden, was mit mir nicht stimmt.
– Heuler
29. Februar 2012 um 19:23 Uhr