1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Erklärung von Layout "weight"?!

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von gfacek, 01.05.2010.

  1. gfacek, 01.05.2010 #1
    gfacek

    gfacek Threadstarter Erfahrener Benutzer

    Beiträge:
    182
    Erhaltene Danke:
    5
    Registriert seit:
    12.02.2010
    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
     
  2. Mort, 02.05.2010 #2
    Mort

    Mort Android-Lexikon

    Beiträge:
    960
    Erhaltene Danke:
    262
    Registriert seit:
    16.11.2009
    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.
     
  3. mabraham, 27.09.2010 #3
    mabraham

    mabraham Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    27.09.2010
    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: 27.09.2010
  4. BenOtto, 27.09.2010 #4
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    Bei mir hat das erste 1/3 und das zweite 2/3.
     
  5. Mort, 27.09.2010 #5
    Mort

    Mort Android-Lexikon

    Beiträge:
    960
    Erhaltene Danke:
    262
    Registriert seit:
    16.11.2009
    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...
     
    mabraham bedankt sich.
  6. mabraham, 27.09.2010 #6
    mabraham

    mabraham Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    27.09.2010
    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: 27.09.2010
  7. BenOtto, 27.09.2010 #7
    BenOtto

    BenOtto Android-Hilfe.de Mitglied

    Beiträge:
    141
    Erhaltene Danke:
    15
    Registriert seit:
    30.08.2010
    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.
     
  8. Mort, 28.09.2010 #8
    Mort

    Mort Android-Lexikon

    Beiträge:
    960
    Erhaltene Danke:
    262
    Registriert seit:
    16.11.2009
    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.
     

Diese Seite empfehlen

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. android layout weight