8
votes

Android ListView: en-tête / pied de page qui remplit l'espace restant à l'écran

Je veux faire une vision de chat à l'aide de ListView où les nouveaux messages apparaissent au bas de l'écran (donc j'utilise Android: Stackfrombottom = "true") et je veux ajouter un en-tête à la liste de liste qui apparaîtra en haut de l'écran. Lorsqu'il y a peu de messages, il y aura un espace vide entre l'en-tête et les messages, quand il y aura beaucoup de messages, la liste de réception sera défilable et l'en-tête sera masqué, lorsque les messages inférieurs sont visibles (l'en-tête fera défiler avec le reste des messages). Le problème est que je ne peux pas dire à la liste de laisser les en-têtes ou les éléments de remplissage de l'espace restant à l'écran. Android: Layout_height = "Fill_Parent" n'aide pas. Je peux rendre l'en-tête statique à l'aide de relativenellement, mais je ne veux pas. Des idées?


0 commentaires

3 Réponses :


0
votes

Pourquoi ne pas simplement mettre la vue de la liste dans une disposition de table avec 3 rangées. Placez la liste de liste dans la ligne du milieu puis utilisez la rangée supérieure et inférieure comme en-tête et le pied de page.


2 commentaires

Ce que Marcos a dit fonctionnera mais je préfère la disposition de la table. Vous pouvez définir votre en-tête et votre pied de page sur une hauteur fixe (dans DIP) et permettre à la liste de rétrécir / augmenter en hauteur en fonction de l'utilisation du périphérique utilisé.


Comme la réponse de Marcos. J'ai vraiment besoin de cette en-tête pour faire défiler la liste ListView, lorsque l'espace vide est rempli. Je l'ai vu sur iPhone mais pas encore sur Android, donc je ne sais pas si possible ou non.



0
votes

Utilisez un linearlayout sur la verticale avec l'en-tête en haut, votre liste de réception au milieu avec layout_weight = "1" puis votre pied de page.

Une solution si vous voulez que l'en-tête soit défilable. Est de gonfler la position 1 de votre adaptateur étant l'en-tête que vous souhaitez faire défiler.


3 commentaires

Mais lorsque je ferai défiler la listeView, l'en-tête restera visible. Comme je l'ai dit, le cas est un peu plus problématique - je veux l'en-tête sur le dessus, quand il n'y a pas assez de messages (et que les messages sont en bas), mais lorsque l'espace est rempli de messages et que la liste de temps devient défilable, je veux L'en-tête pour faire défiler la liste.


Hmmm .. c'est un peu plus compliqué. Vérifiez ma nouvelle réponse.


Merci de continuer à me répondre! Je ne sais toujours pas comment placer l'en-tête sur le dessus de l'écran (alignez-le de haut de l'écran) et placez le reste des éléments en bas lorsque vous n'avez pas suffisamment de contenu pour remplir la liste de liste. Faire des calculs de base du code dans le code est une solution possible, mais je cherche un moyen plus intelligent de le faire.



0
votes

Il suffit de créer une mise en page différente, telle que Header_List.xml xxx pré>

et dans votre activité, ajoutez-le comme p>

View headerView = inflater.inflate(R.layout.header_list, null);
yourlistView.addHeaderView(headerView);


1 commentaires

Merci pour votre réponse, mais ce n'était pas la question. La façon dont j'ai résolu la mine pour l'instant est de placer l'en-tête en haut de l'écran et lorsque le premier élément de la liste n'est plus visible pour le masquer avec l'animation.