Erklärung von Layout "weight"?!

G

gfacek

Fortgeschrittenes Mitglied
5
Hi,

ich weiß, es gibt viele Quellen für sowas, aber irgendwie hat mir keine richtig weitergeholfen. Hab jetzt auch etwas damit gespielt, aber irgendwie scheint das ganze für mich etwas unlogisch...

Ich hab das Beispiel von LinearView durchgespielt, da ist ein LinearLayout horizontal (drin 4 TextView) und ein LinearLayout vertikal (drin auch 4 TextView)...beides in einem LinearLayout vertikal.

Also:

LinearView(vertikal)
..LinearView(horizontal)
....Textview
....Textview
....Textview
....Textview
..LinearView(vertikal)
....Textview
....Textview
....Textview
....Textview

Wenn ich jetzt die weight eines TextView in dem inneren horizontalen vergrößere, nimmt dieses eine MEHR platz ein. Beim inneren vertikalen auch.
Wenn ich jetzt das weight vom horizontalen LinearView ändere, nimmt dieser WENIGER Platz ein.

Wenns so ist, ists halt so...aber ich versteh die Logik dahinter nicht. Kann auch daran liegen, das ich noch nicht ganz so fit gerade bin (is ja noch früh ;-))

Gruß Töbi
 
Naja, was mehr wiegt, nimmt meist auch mehr Platz ein - verschiedene spezifische Gewichte pro Element nehme ich mal nicht an... ;)

Im Prinzip ist's relativ einfach: Android verteilt die "gewichteten" Elemente mit "wrap_content"-Größe so gut es geht prozentual am "Gesamtgewicht". Ob du nun 70+30 oder 7+3 nimmst, ist dabei egal. Es wird aber versucht, wenigstens den Inhalt darzustellen, dadurch kanns zu Verschiebungen kommen. Wenn also zwei Buttons 50:50 nebeneinander erscheinen sollen, einer aber 'ne sehr lange Beschriftung hat, wird der vermutlich größer.
 
Hallo,

ich schließe mich der Frage an.

Ausgehen möchte ich vom Beispiel zur LinearView, auf das sich auch *gfacek* bezieht
Linear Layout | Android Developers

Verstellt man layout_weight der LinearViews zweiter Ordnung, also:
Code:
[..]
  <LinearLayout
      android:orientation="horizontal"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:layout_weight="1">
[..]
  <LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="2">
[..]

So nimmt das zweite LinearLayout nur noch ein drittel des vertikal zur Verfügung stehenden Platzes ein, den Rest nimmt das andere LinearLayout ein. Man erwartet ein umgekehrtes Verhältnis.

Ich habe dies im Emulator mit Android 2.2 getestet.

Wo liegt das Problem?

Martin
 
Zuletzt bearbeitet:
Bei mir hat das erste 1/3 und das zweite 2/3.
 
Wenn da wirklich android:layout_height="fill_parent" verwendet wurde, ist's schon fast ein Wunder, dass das zweite Layout überhaupt zu sehen war. Probiert's doch mal mit android:layout_height="wrap_content".
Aber wie schon gesagt: Android nimmt die "weights" scheinbar eher als "Empfehlung", Abweichungen vom erwarteten Ergebnis sind durchaus üblich...
 
  • Danke
Reaktionen: mabraham
Danke Mort,

über die Angabe
Code:
android:layout_height="fill_parent"
habe ich mich auch schon gewundert. Aber als Einsteiger ist man ja gottesfürchtig, besonders, wenn das Tutorial offiziell ist. Nachdem ich die Einstellung in
Code:
android:layout_height="wrap_content"
geändert habe, läuft alles wie es soll.

Danke für die schnelle unkomplizierte Hilfe.

Martin
 
Zuletzt bearbeitet:
Es macht schon Sinn, dass da fill_parent steht. Ohne layout_weight sieht man dann nur die erste View und mit beide im Verhältnis. Bei wrap_content kann es passieren, dass die Breite beider Kindelemente zusammen kleiner ist, als die des LinearLayouts.
 
Das gilt natürlich für's Elternelement - wenn das nur "wrap_content" hat, gibt's nichts mit "Gewicht" aufzufüllen.

"fill_parent" funktioniert allerdings teilweise auch für die "dicken Kinder". Wo's klappt, oft sogar besser (gleichmäßiger) als "wrap_content". Allzu oft kommt's aber vor, dass dann Kinder verschwinden oder nur teilweise dargestellt werden. Halbwegs zuverlässig scheint's nur zu sein, wenn alle Kinder gleichschwer sind.
 

Ähnliche Themen

S
Antworten
17
Aufrufe
518
jogimuc
J
L
Antworten
4
Aufrufe
1.307
lonnie9020
L
5
Antworten
22
Aufrufe
1.340
590239
5
Zurück
Oben Unten