Activity-Layout BereichOben-Scrollbereich-BereichUnten

  • Antworten:3
  • Bentwortet
Luegisdorf
  • Forum-Beiträge: 14

20.04.2013, 12:24:00 via Website

Hallo liebe Freunde

Ich bin am Zusammenstellen des Designs für eine Activity und bin zu blöd folgendes fertigzukriegen: Ich die Aktivität in drei Bereiche unterteilen: Ein Bereich, der nach oben ausgerichtet ist, in der Mitte ein Bereich, der einen scrollbaren Inhalt aufweist, und einen Bereich, der nach unten ausgerichtet ist. Der obere und der untere Bereich sollen nur so viel Platz konsumieren, wie nötig, der mittlere Scrollbereich darf den Rest des Platzes konsumieren. Klingt ja eigentlich ganz einfach, nicht?

Zur einfachen Veranschaulichung:

----------------------------
oberer Bereich (nach oben ausgerichtet)
----------------------------
Scrollbereich (nach oben und unten ausgerichtet)
.
.
.
.
.
---------------------------
Unterer Bereich (nach unten ausgerichtet)
---------------------------

Irgendwie bringe ich das aber nicht so gewünscht zum laufen. Z.Z habe ich es so aufgebaut:
LinearLayout Vertikal (Gesamtcontainer weightSum=3)
- LinearLayout Horizontal (Oberer Bereich, layoutWeight=1)
- ScrollView Vertikal (Mittlerer Bereich, layoutWeight=1)
- LinearLayout Vertikal (Unterer Bereich, layoutWeight=1)

Nun sind zwar unterer und oberer Bereich schön nach oben und unten ausgerichtet, aber so schmal, dass Elemente innerhalb dieser beiden Bereich nicht vollständig angezeigt (also beschnitten) werden. Natürlich sollte es so sein, dass die Grösse des unteren und oberen Bereichs sich nach derern Inhalt richtet ...

Hier der XML-Code.

1<LinearLayout xmlns:android="httpdoopelpunktstrichstrichschemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 android:orientation="vertical"
5 android:weightSum="3">
6
7 <LinearLayout
8 android:layout_width="match_parent"
9 android:layout_height="wrap_content"
10 android:layout_weight="1">
11
12
13 <Button
14 android:id="@+id/button1"
15 android:layout_width="wrap_content"
16 android:layout_height="wrap_content"
17 android:text="Button" />
18
19 </LinearLayout>
20
21 <ScrollView
22 android:id="@+id/scrollView1"
23 android:layout_width="match_parent"
24 android:layout_height="match_parent"
25 android:layout_weight="1">
26
27 <LinearLayout
28 android:layout_width="match_parent"
29 android:layout_height="match_parent"
30 android:orientation="vertical" >
31
32 <Button
33 android:id="@+id/button10"
34 style="?android:attr/buttonStyleSmall"
35 android:layout_width="wrap_content"
36 android:layout_height="wrap_content"
37 android:text="Button" />
38
39 <Button
40 android:id="@+id/button9"
41 style="?android:attr/buttonStyleSmall"
42 android:layout_width="wrap_content"
43 android:layout_height="wrap_content"
44 android:text="Button" />
45
46 </LinearLayout>
47
48 </ScrollView>
49
50
51 <LinearLayout
52 android:layout_width="match_parent"
53 android:layout_height="wrap_content"
54 android:orientation="vertical"
55 android:layout_weight="1">
56
57 <Button
58 android:id="@+id/button2"
59 android:layout_width="wrap_content"
60 android:layout_height="wrap_content"
61 android:text="Button" />
62
63 </LinearLayout>
64
65 </LinearLayout>


Ich bin sicher, die Lösung ist trivial, aber ich brings nicht fertig. Danke für Eure Antworten!

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

20.04.2013, 14:25:34 via Website

Nimm ein RelativeLayout als Container, darin
- ein beliebiges Layout "header"
- ein ScollView mit below:header, above:footer
- ein beliebiges Layout "footer" mit alignParentBottom=true

Antworten
Luegisdorf
  • Forum-Beiträge: 14

20.04.2013, 14:32:22 via Website

Danke, grad hab ich selber auch eine Lösung gefunden - ich war nah dran

1<LinearLayout xmlns:android="http\\schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 android:gravity="fill"
5 android:orientation="vertical">
6
7 <LinearLayout
8 android:layout_width="match_parent"
9 android:layout_height="wrap_content">
10
11 </LinearLayout>
12
13 <ScrollView
14 android:id="@+id/scrollView1"
15 android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:layout_weight="1" >
18
19 </ScrollView>
20
21 <LinearLayout
22 android:layout_width="match_parent"
23 android:layout_height="wrap_content"
24 android:orientation="vertical"
25 android:gravity="bottom">
26
27 </LinearLayout>
28
29 </LinearLayout>

Das entscheidende ist, dem mitteleren Bereiche eine Layoutgewichtung von 1 zu verpassen. Fragt mich nicht warum das dann funktioniert, aber es geht :)

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

20.04.2013, 17:28:05 via Website

Fragt mich nicht warum das dann funktioniert, aber es geht

Wenn du nicht erklären kannst warum das funktioniert, woher willst du dann wissen, das es nicht nur auf deinem Testgerät mit deiner aktuellen Android-Version funktioniert? :ph34r:
Mich würde sowas nicht zufrieden stellen :P

Wieder im Ernst: die Lösung scheint mir OK zu sein, das funktioniert weil die anderen Blöcke kein weight haben und damit zu 0 bewertet werden, woraus sich ergibt, das dein Scrollview den ganzen Platz erhält, den die anderen nicht mindestens benötigen.

Antworten