Layout Verteilung Zwischenräume

  • Antworten:13
Andreas Bauer
  • Forum-Beiträge: 17

07.12.2011, 20:05:39 via Website

Hallo Leute,

ich versuche gerade ein paar Buttons gleichmäßig in einem Linear-Layout zu verteilen, finde da aber keine passende Möglichkeit.
Bei Qt konnte man da Spacer einfügen und einstellen wieviel Prozent die jeweils nehmen an dem was an Platz übrig ist und dergleichen.
Ich hätte z.B. gern 3 Buttons fester Größe und rechts links und dazwischen insgesammt 5 Abstände die gleich groß sind, so das alles über die gesammte Breite geht. Ich habe auch schon etwas gegoogelt, so richt finde ich da nichts, Layout-Margins fester Pixel-Größe bringt es nicht, Prozent-Einheit gibt es nicht.

Antworten
Florian B.
  • Forum-Beiträge: 284

07.12.2011, 21:33:13 via Website

Schau dir mal das Weight-Attribut an, das sollte genau das machen was du willst.

Antworten
Andreas Bauer
  • Forum-Beiträge: 17

07.12.2011, 22:36:13 via Website

Nö das verändert die Buttongröße, macht aber keine Zwischenräume....

Antworten
Florian B.
  • Forum-Beiträge: 284

08.12.2011, 10:09:14 via Website

Doch, das sollte schon gehen. Zeig mal dein LinearLayout wie es bisher ausschaut.

Antworten
Gelöschter Account
  • Forum-Beiträge: 24

08.12.2011, 10:09:22 via Website

Zwei Möglichkeiten:

* Spiel mal mit den layout_marginLeft und layout_marginRight Attributen beim Button.

* Versuchs mit einem generischen View als Spacer. Du hättest dann 3 Buttons und 5 Views denen Du jeweils ein passendes layout_weight Attribut gibst:

1...
2<Button ...>
3<View
4 android:layout_height="wrap_content"
5 android:layout_weight="5"
6 android:layout_width="fill_parent" />
7<Button ...>
8...

Gruß
Harald

— geändert am 08.12.2011, 10:09:55

Antworten
Florian B.
  • Forum-Beiträge: 284

08.12.2011, 10:38:05 via Website

Jo genau, das wollte ich auch gerade vorschlagen. Entweder mit Spacern arbeiten. Oder die Margin anpassen.


Das wäre in etwa der Code für die Spacer.
1<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="fill_parent"
3 android:layout_height="fill_parent"
4 android:orientation="vertical"
5 >
6 <Button android:id="@+id/btn_1"
7 android:layout_height="0dp"
8 android:layout_width="fill_parent"
9 android:layout_weight="1"
10 />
11 <View
12 android:layout_height="0dp"
13 android:layout_width="fill_parent"
14 android:layout_weight="2"
15 />
16 <Button android:id="@+id/btn_2"
17 android:layout_height="0dp"
18 android:layout_width="fill_parent"
19 android:layout_weight="1"
20 />
21 <View
22 android:layout_height="0dp"
23 android:layout_width="fill_parent"
24 android:layout_weight="2"
25 />
26 <Button android:id="@+id/btn_3"
27 android:layout_height="0dp"
28 android:layout_width="fill_parent"
29 android:layout_weight="1"
30 />
31</LinearLayout>

Antworten
Andreas Bauer
  • Forum-Beiträge: 17

08.12.2011, 11:35:21 via Website

Das mit dem View als Spacer ist der Key, da bin ich nicht drauf gekommen, muß ich auch mal schauen ob und wo es das im grafischen Editor gibt, aber gleich als xml wird sowieso kürzer:

<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<View android:layout_weight="9" />
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/btn_star" />
<View android:layout_weight="9" />
<!-- ... -->
</LinearLayout>

Ich habe das im übrigen sauber mit Einrückungen aber das Forum hier kürzt mehrere Leerzeichen in Folge weg, sehr hässlich, sollte man ändern...
... man kann Einrückungen mit indent ... /indent in eckigen Klammern im Beitragstext hinbekommen muss man aber immer nacharbeiten...

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

08.12.2011, 11:39:42 via Website

Ich würde die Lösung mit den margins bevorzugen.
Ist performanter und sauberer.

Gib dem Layout drumherum ein padding für den äußeren Rand und den Buttons (bis auf den letzten) jeweils ein marginRight.

— geändert am 08.12.2011, 11:39:59

Philip M.

Antworten
Andreas Bauer
  • Forum-Beiträge: 17

08.12.2011, 11:43:16 via Website

Wie kann man den ein Margin in Prozent oder meinetweigen weight oder was immer angeben?
Absolut nützt ja nichts bei unterschiedlichen Display-Breiten.
Woher weißt Du das mit der Performance?
... Gerade fällt mir ein, wie könnte man angeben, daß der Abstand genauso breit ist wie der Button, irgendwie mit relativen Layouts vielleicht...

— geändert am 08.12.2011, 11:45:02

Antworten
Florian B.
  • Forum-Beiträge: 284

08.12.2011, 18:36:54 via Website

Den Margin-Wert kann man nicht in % angeben. Den Weight-Wert indirekt schon, indem du einfach davon ausgeht, dass die Summe aller Weight-Werte 100 ergibt. Eine Weight="1" entspricht dann 1%.

Antworten
Gelöschter Account
  • Forum-Beiträge: 24

09.12.2011, 10:13:13 via Website

Das mit der 100 stimmt nicht. Android summiert die weights und verteilt diese Summe anteilig auf die einzelnen Elemente. Ob Du 60+40 oder 6+4 oder 3+2 nimmst macht keinen Unterschied.

Gruß
Harald

Antworten
Florian B.
  • Forum-Beiträge: 284

09.12.2011, 10:31:26 via Website

Ich weiß. Daher hatte ich ja geschrieben, dass man es "indirekt" in Prozent angeben kann. Das schließt ja nicht aus, dass es anders auch geht. ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 24

09.12.2011, 14:28:38 via Website

Den Weight-Wert indirekt schon, indem du einfach davon ausgeht, dass die Summe aller Weight-Werte 100 ergibt. Eine Weight="1" entspricht dann 1%.

Ah verstehe, mit der Formulierung hast Du mich reingelegt. Die Summe aller Weight-Werte entspricht 100%.

Gruß
Harald Wilhelm

Antworten