Android RelativeLayout et la hauteur de wrap_content?
Je suis en train de faire une sélection ListActivity, similaire à celui utilisé pour ajouter des raccourcis à l'écran de lancement des écrans. J'ai roulé mon propre en-tête et pieds de page, que je voudrais être "collant" en haut et en bas de la vue lorsque sur l'écran. Pour ce faire, j'utilise un RelativeLayout avec l'en-tête set de dock haut de page, pied de page mis à quai à fond, et la liste ensemble pour aller en dessous de l'en-tête et au-dessus du pied de page. En termes de la disposition générale de l'activité, c'est le rendu que je m'attends. L'en-tête est collante vers le haut, le pied de page est collante vers le bas, et la liste défile entre eux.
Une chose étrange mais qui s'est passé lorsque je suis passé à la RelativeLayout que ma racine. Consultez la capture d'écran suivante:
Je veux que mon Activité est à la hauteur de wrap_content
, de sorte que la forme n'est aussi élevé que le contenu affiché en elle, mais une fois que je suis passé à RelativeLayout, il semble rendre l'Activité efficacement que fill_parent
, en prenant tout l'écran, même si le contenu ne le justifie pas. Notez qu'il n'y a pas suffisamment d'éléments de la liste pour remplir l'écran, qui, avec les fill_parent
le style, est en laissant une bande de l'espace entre la fin de la liste, et le pied de page. J'ai été ma hauteur par l'intermédiaire de styles - ce qui a bien fonctionné avec LinearLayout, mais semble être ignorés aujourd'hui. J'ai donc essayé de coder en dur la hauteur directement sur le RelativeLayout, mais cela ne fonctionne toujours pas et encore rendu sous la forme d' fill_parent
.
Voici ma mise en page de code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/GroupsList"
android:layout_height="wrap_content">
<FrameLayout android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/hdrGroups"
android:layout_alignParentTop="true">
<include layout="@layout/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</include>
</FrameLayout>
<FrameLayout style="@style/MyFooter"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentBottom="true"
android:id="@+id/ftrGroups">
<ImageView style="@style/CloseButton"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/add"
android:id="@+id/imgGroupsAdd"
android:clickable="true">
</ImageView>
</FrameLayout>
<ListView android:divider="#9f9f9f"
android:id="@+id/android:list"
android:choiceMode="singleChoice"
android:dividerHeight="1dp"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_below="@id/hdrGroups"
android:layout_above="@id/ftrGroups">
</ListView>
<TextView android:text="@string/browser_no_groups"
style="@style/ListedItemB"
android:id="@+id/android:empty"
android:layout_height="wrap_content"
android:layout_above="@id/ftrGroups"
android:layout_below="@id/hdrGroups"
android:layout_width="fill_parent">
</TextView>
</RelativeLayout>
Toute la présentation est faite via XML, ... je ne suis pas de faire toute la mise en page dans le code.
Comment puis-je obtenir le collant en-tête et pied de page, tout en ayant l'ensemble des activités se comporter dans un wrap_content
mode pour sa hauteur? Est-il un autre moyen je devrais aller sur ce, au lieu d'un RelativeLayout?
Je vais voir si je peux jeter quelque chose ensemble dans les prochains jours.
Eh bien, j'ai finalement eu la chance et a jeté un exemple... le trouver ici: dl.dropbox.com/u/19767586/layout.test.zip . J'ai aussi inclus deux screenies, on est à quoi il ressemble, on est à quoi il doit ressembler.
OriginalL'auteur eidylon | 2011-05-11
Vous devez vous connecter pour publier un commentaire.
Selon la documentation pour les développeurs de votre comportement souhaité n'est pas possible pour un Parent de mise en page ;(
"Notez que vous ne pouvez pas avoir une dépendance circulaire entre la taille de la RelativeLayout et la position de ses enfants. Par exemple, vous ne pouvez pas avoir un RelativeLayout dont la hauteur est fixée à WRAP_CONTENT et un enfant ensemble à ALIGN_PARENT_BOTTOM. "
RelativeLayout
Pour résoudre votre problème, vous pourriez peut-être essayer d'utiliser un linéaire de la mise en page, définissez à wrap_content et définir max hauteur via le code à la hauteur de l'écran.
Vous pouvez obtenir la hauteur de l'écran, comme décrit ici obtenir la hauteur de l'écran
J'ai exactement le même problème. Android fragmentation à son meilleur. Le LinearLayout vis le pied de page de la mise en page faisant serrer à zéro en bas si la liste est assez longue. C'est tellement triste.
Je voulais mettre un autre point de vue au-dessus de la vue d'en bas, mais j'ai été confronté à ce problème, je l'ai fait l'inverse de l'ordre: le jeu en haut de vue du "ALIGN_PARENT_TOP' (échapper au problème) et régler le fond de la vue avec "layout_below'. Mon problème, alors fixe
OriginalL'auteur Diego Frehner
Je viens de changer mon RelativeLayout dans FrameLayout et tout commence à travailler
OriginalL'auteur Alecs