Ich habe ein lineares Layout (horizontal ausgerichtet), das 3 Schaltflächen enthält. Ich möchte, dass die 3 Schaltflächen eine feste Breite haben und gleichmäßig über die Breite des linearen Layouts verteilt sind.
Ich kann dies erreichen, indem ich die Schwerkraft des linearen Layouts auf Mitte stelle und dann die Polsterung der Tasten anpasse. Dies funktioniert jedoch bei einer festen Breite und nicht beim Ändern von Geräten oder Ausrichtungen.
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:gravity="center">
<Button
android:id="@+id/btnOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnTwo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
<Button
android:id="@+id/btnThree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="120dip"></Button>
</LinearLayout>
android
android-linearlayout
Yamspog
quelle
quelle
Antworten:
Aufbauend auf Fedj Antwort , wenn Sie setzen
layout_width
auf0dp
und setzenlayout_weight
für jede der Tasten 1, die zur Verfügung stehende Breite zwischen den Tasten gleichmäßig geteilt werden.quelle
Wenn Sie nicht möchten, dass die Schaltflächen skaliert werden, sondern den Abstand zwischen den Schaltflächen anpassen (gleicher Abstand zwischen allen Schaltflächen), können Sie Ansichten mit weight = "1" verwenden, die den Abstand zwischen den Schaltflächen ausfüllen:
quelle
Space
Ansichtstyps. Macht die Dinge etwas lesbarer.Sie können es wie folgt verwenden.
quelle
Space
bis jetzt noch nie davon gehörtSie können dies tun, indem Sie sowohl
View
salayout_width
von0dp
als auch alayout_weight
von angeben1
:Die Art und Weise, wie android layout_weight funktioniert, ist folgende:
match_parent
, wird der verbleibende Raum im Verhältnis vonlayout_weight
s geteilt. Wenn Sie also die Ansichtenlayout_weight="2"
undlayout_weight="1"
angegeben haben, beträgt das resultierende Verhältnis 2 zu 1, dh die erste Ansicht erhält 2/3 des verbleibenden Platzes und die andere Ansicht 1/3.Wenn Sie also
layout_width
eine Größe für0dp
den ersten Schritt angeben, hat dies keine zusätzliche Bedeutung, da beiden Ansichten kein Leerzeichen zugewiesen ist. Dann entscheidet nur der zweite Punkt über den Platz, den jederView
erhält, und gibt demView
s den Raum, den Sie entsprechend dem Verhältnis angegeben haben!Um zu erklären, warum
0dp
der Speicherplatz gleichmäßig aufgeteilt wird, geben Sie ein Beispiel, das das Gegenteil zeigt: Der folgende Code würde zu etwas anderem führen, daexample text
die Breite jetzt größer ist als0dp
weilwrap_content
der freie Speicherplatz weniger als 100% geteilt werden muss weil der Text Platz braucht. Das Ergebnis wird sein , dass sie 50% des freien Raums erhalten tun übrig , als der Text hat schon etwas Platz , so dass dieTextView
haben weit über 50% der Gesamtfläche.quelle
Wenn Sie genau 3 Schaltflächen haben und es in Ordnung (oder sogar geplant) ist, dass die äußeren Schaltflächen nach links und rechts ausgerichtet sind, sollten Sie ein RelativeLayout ausprobieren, das (in vielen Situationen) weniger Aufwand bedeutet.
Sie können
layout_alignParentBottom
alle Schaltflächen am unteren Rand des Layouts ausrichten. Verwenden Sielayout_alignParentLeft and Right
für die äußeren Tasten undlayout_centerHorizontal
für die mittlere Taste.Das funktioniert gut bei verschiedenen Ausrichtungen und Bildschirmgrößen.
quelle
Sie sollten einen Blick auf das Attribut android: layout_weight werfen
quelle
Die moderne Lösung hierfür ist Flexbox .
Stellen Sie sicher, dass Sie importieren
implementation 'com.google.android:flexbox:2.0.0'
Flexbox
ist weitaus mächtiger; es ist eine gute Ergänzung zuConstraintLayout
. Dies ist eine großartige Ressource , um mehr zu erfahren.quelle
Um zwei Schaltflächen in einem horizontalen linearen Layout gleichmäßig zu verteilen, habe ich 3 LinearLayout-Objekte verwendet, um als Leerzeichen zu fungieren, deren Größe automatisch geändert wird. Ich habe diese LinearLayout-Objekte wie folgt positioniert:
[] Button1 [] Button2 []
([] steht für ein LinearLayout-Objekt, das für den Abstand verwendet wird.)
Dann setze ich die Gewichte jedes dieser [] LinearLayout-Objekte auf 1 und erhalte gleichmäßig verteilte Schaltflächen.
Hoffe das hilft.
quelle
Ich habe ein benutzerdefiniertes View DistributeLayout erstellt , um dies zu tun.
quelle
Ich schlage vor, dass Sie das weightSum-Attribut von LinearLayout verwenden.
Wenn Sie das Tag
android:weightSum="3"
zur XML-Deklaration Ihres LinearLayout und dannandroid:layout_weight="1"
zu Ihren Schaltflächen hinzufügen, werden die drei Schaltflächen gleichmäßig verteilt.quelle
Dies kann erreicht werden, indem
weight
jeder im Container hinzugefügten Schaltfläche zugewiesen wird. Dies ist sehr wichtig, um die horizontale Ausrichtung zu definieren:So können wir dies in unser Gerät als Ergebnis bekommen:
Selbst wenn wir unser Gerät drehen, können die
weight
in jedem Knopf definierten Elemente die Elemente gleichmäßig entlang des Containers verteilen:quelle
Am besten verwenden Sie TableLayout mit android: layout_width = "match_parent" und in Spalten android: layout_weight = "1" für alle Spalten
quelle
Die obigen Antworten mit layout_did haben bei mir nicht funktioniert, aber die folgenden haben funktioniert.
So sieht es auf dem Bildschirm aus,
quelle
Vor allem die Antworten sind richtig, aber in einem Fall, in dem Sie sichtbare und verschwundene Funktionen benötigen, funktioniert diese pragmatische Methode gut
quelle
Gleichgewichtige Kinder
Um dies zu Arbeit in der
LinearLayout
Ansicht Gruppe die Attributwerte fürandroid:layout_width
undandroid:layout_height
sein müssen gleich"match_parent"
...quelle
Im Kreis werden Tom, Tim und Todd mit 3 Zentimetern angenommen. Wenn Sie möchten, dass es sich um einen Touchdown-Bildschirm handelt, geben Sie an, dass Tom und Tim 1 Zentimeter betragen. Dies bedeutet, dass sie virtuell kombiniert werden, die 2D-Ebene jedoch unten liegt. Dies wird auf dem Bildschirm angezeigt.
quelle
quelle
Der einfachste und schnellste Weg (aber nicht der beste) besteht darin, eine Textansicht mit einem leeren Textattribut wie diesem hinzuzufügen
Die Hintergrundfarbe muss im LinearLayout identisch sein, dann können Sie die Auffüllungseigenschaft wie folgt verwenden
oder was auch immer du brauchst. Hier ist ein Beispiel.
quelle