2010-11-18 8 views
1

Ich habe eine RelativeLayout, die drei Elemente enthält: eine TableLayout am oberen Rand, die einige Steuerelemente enthält (layout_alignParentTop = true), ein LinearLayout am unteren Rand (layout_alignParentBottom = true), das ein paar Buttons und enthält ein ListView, das sich zwischen ihnen erstreckt (mit Layout_unterhalb und Layout_über die beiden Elemente). Das funktioniert gut, aber unter bestimmten Umständen muss das untere LinearLayout verschwinden. Wenn ich setVisibility verwende, um es auf View.GONE zu setzen oder seine Höhe mit setLayoutParams() auf 0 zu setzen, lehnt die ListView hartnäckig die Größenänderung ab, um den neu frei gewordenen Platz einzunehmen. Ich habe versucht, requestLayout() auf im Grunde alles in der Hierarchie aufzurufen, und nichts scheint zu funktionieren. Wenn ich den Hierarchie-Viewer einschalte, kann ich sehen, dass die Ansicht weg ist/layout_height von 0 hat, aber immer noch nicht funktioniert.Android: Einstellung der Ansichtshöhe auf 0

Ironischerweise, nachdem der Hierarchie-Viewer fertig ist, korrigiert sich das Layout selbst. Ich denke, dass es inakzeptabel ist, wenn meine Benutzer den Hierarchie-Viewer ausführen.

BEARBEITEN: Das mittlere Layout ist eigentlich ein RelativeLayout, das die ListView enthält, was wichtig sein könnte, ich werde versuchen, es zu beseitigen. Ich habe eine vereinfachte Version meiner XML-Datei veröffentlicht, die eine Vorstellung davon gibt, was ich sehe.

<RelativeLayout 
    android:id="@+id/main_container" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/top_table" 
     android:layout_alignParentTop="true" 
     android:stretchColumns="2" 
     android:shrinkColumns="1"> 
     <!-- removed for simplicity --> 
    </TableLayout> 
    <RelativeLayout 
     android:id="@+id/main_content" 
     android:descendantFocusability="afterDescendants" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/title_table" 
     android:layout_above="@id/ad_toolbar"> 
     <!-- removed for simplicity --> 
     <ListView 
      android:id="@+id/android:list" 
      android:layout_alignParentTop="true" 
      android:descendantFocusability="afterDescendants" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /> 
    </RelativeLayout> 

    <LinearLayout 
     android:id="@+id/bottom_layout" 
     android:orientation="vertical" 
     android:layout_alignParentBottom="true" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 
     <!-- removed for simplicity --> 
    </LinearLayout> 
</RelativeLayout> 
+0

können Sie die .xml des Layouts veröffentlichen? –

+0

Das eigentliche XML ist ziemlich kompliziert, da das Layout aus ein paar Layoutdateien besteht, die von verschiedenen Aktivitäten verwendet werden, aber ich habe oben eine vereinfachte Version veröffentlicht. Und ich erkannte, dass die mittlere Region eigentlich eine RelativeLayout ist, die die ListView enthält, was einen Unterschied machen könnte, ich werde versuchen, sie zu eliminieren. – jjb

Antwort

1

Gibt es einen bestimmten Grund, warum Sie RelativeLayout für die Eltern verwenden? Dies klingt nach einem Fall, in dem Sie ein vertikales LinearLayout verwenden sollten, das das TableLayout, das ListView und dann das LinearLayout (in dieser Reihenfolge) enthält, wobei das ListView layout_height = "0dip" und layout_weight = "1" hat. Wenn Sie Sichtbarkeit im unteren LinearLayout festlegen, sollte das Layoutgewicht der ListView dazu führen, dass sie erweitert wird, um den Platz zu füllen.

+0

layout_weight ist die richtige Lösung. Entweder dachte er noch nicht daran, oder das Problem ist komplizierter als wir denken. Ich bezweifle es jedoch. Deshalb wäre das XML nützlich. als wir konnten es nur schnell beheben: D –

+0

Es ist ein RelativeLayout, weil die Layout-Datei mit den oberen und unteren Elemente über mehrere Aktivitäten verwendet wird, und einige von ihnen verwenden die Tatsache, dass es ein RelativeLayout ist, um Unterelemente entsprechend zu positionieren. Nicht alle möglichen Layouts funktionieren problemlos als LinearLayout. – jjb