2010-11-18 4 views
1

J'ai un RelativeLayout qui comprend trois éléments: un TableLayout en haut qui contient des contrôles (layout_alignParentTop = true), un LinearLayout en bas (layout_alignParentBottom = true) qui contient quelques boutons et un ListView qui s'étire entre eux (en utilisant layout_below et layout_above les deux éléments). Cela fonctionne très bien, mais dans certaines circonstances, le fond LinearLayout doit disparaître. Si j'utilise setVisibility pour le définir sur View.GONE ou pour définir sa hauteur à 0 à l'aide de setLayoutParams(), ListView refuse obstinément de redimensionner pour occuper l'espace nouvellement libéré. J'ai essayé d'appeler requestLayout() sur pratiquement tout dans la hiérarchie, et rien ne semble fonctionner. Si je lance la visionneuse de la hiérarchie, je peux voir que la vue a disparu/a layout_height de 0, mais cela ne fonctionne toujours pas. Ironiquement, une fois la visionneuse de la hiérarchie terminée, la mise en page se corrige elle-même. Je pense que le fait que mes utilisateurs lancent une visionneuse hiérarchique est probablement inacceptable.Android: Réglage de la hauteur de vue à 0

EDIT: La mise en page du milieu est en fait un RelativeLayout contenant le ListView, ce qui pourrait importer, je vais essayer de l'éliminer. J'ai posté une version simplifiée de mon XML qui donne une idée de ce que je regarde.

<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

pouvez-vous poster le .xml de la mise en page? –

+0

Le XML actuel est assez compliqué, car la mise en page est composée de quelques fichiers de mise en page qui sont utilisés par différentes activités, mais j'ai posté une version simplifiée ci-dessus. Et j'ai réalisé que la région du milieu est en fait un RelativeLayout qui contient le ListView, ce qui pourrait faire une différence, je vais essayer de l'éliminer. – jjb

Répondre

1

Y a-t-il une raison particulière pour laquelle vous utilisez RelativeLayout pour le parent? Cela ressemble à un cas dans lequel vous devez utiliser un LinearLayout vertical contenant le TableLayout, le ListView, puis le LinearLayout (dans cet ordre), où ListView a layout_height = "0dip" et layout_weight = "1". Lorsque vous définissez la visibilité sur le LinearLayout inférieur, le poids de mise en page de ListView doit l'agrandir pour remplir l'espace.

+0

layout_weight est la bonne solution. soit il n'y pensait pas encore, soit le problème est plus compliqué qu'on ne le pense? j'en doute cependant. c'est pourquoi le xml serait utile. D –

+0

Il s'agit d'un RelativeLayout car le fichier de disposition contenant les éléments supérieur et inférieur est utilisé pour plusieurs activités, et certains d'entre eux utilisent le fait qu'il s'agit d'un RelativeLayout pour positionner les sous-éléments de manière appropriée. Toutes les mises en page possibles ne fonctionnent pas facilement comme LinearLayout. – jjb

Questions connexes