2010-08-16 8 views
0

Je sais qu'il y a beaucoup de questions sur les tailles dynamiques pour les composants Flex, mais celle-ci est assez spécifique et les autres réponses ne sont pas très utiles. En bref, j'ai besoin d'une liste qui redimensionne exactement son contenu, à moins que cette taille dépasse son conteneur parent (de taille dynamique). Mes exigences sont les suivantes:Création d'un composant de liste Flex de taille dynamique

  • Le composant étend la liste, ou du moins agit de manière similaire.
  • variableRowHeight et wordWrap tous deux égaux à true.
  • La hauteur de la liste ne peut pas être inférieure à minHeight (environ 32px pour les flèches de la barre de défilement).
  • La hauteur de la liste ne peut pas être supérieure à la hauteur du conteneur parent.
    • Notez que le conteneur parent peut être redimensionné dynamiquement.
  • La hauteur de la liste doit être mise à jour en fonction de la taille du contenu et du conteneur parent.
    • La mise à jour en direct serait préférable mais pas nécessaire.
  • Il ne devrait pas y avoir de barre de défilement si la hauteur du contenu est inférieure à la hauteur du conteneur parent (cela semble évident, mais j'ai aussi eu des problèmes avec ça).

Le problème est que, avec variableRowHeight et wordWrap, il est très difficile de connaître la taille du contenu à tout moment. Si la largeur du conteneur parent est réduite, un retour à la ligne peut apparaître dans la liste, ce qui modifiera la hauteur du contenu. Je sais que je peux mesurer la hauteur du contenu de la liste en utilisant measureHeightOfItems() + viewMetrics.top + viewMetrics.bottom, mais quand devrais-je calculer cela? Quels événements dois-je écouter? Et la chose avec laquelle j'ai eu le plus de problèmes - quand devrais-je le calculer pour définir la taille initialement (c'est-à-dire juste comme le contenu a fini de peupler)?

Je m'attaque à ça depuis des mois maintenant, mais je n'arrive jamais à trouver une solution (même si je me suis rapproché de morceaux de code plus ou moins incompréhensibles). Je ne demande pas à quelqu'un de créer un composant complet pour moi, j'espère juste que quelqu'un a les bons indicateurs pour me dire comment je dois déterminer et mettre à jour la taille. Je suis heureux de faire tout le prototypage pour vous et discuter des résultats :).

Répondre

1

Les composants Flex personnalisés sont définitivement leur propre bête. Vous avez beaucoup de dévouement à passer des mois à travailler sur un!

Si vous ne l'avez pas déjà vu, vous devriez certainement jeter un oeil à la Flex Component Lifecycle. Cela répondra à vos questions sur l'endroit où exécuter le code. Je crois que measure() et commitProperties() vont être importants pour votre composant.

Je trouve également que validateNow() est une fonction très utile lors de la gestion de composants avec des enfants et/ou des parents de taille dynamique. Je n'ai pas encore compris quand les temps optimaux pour appeler cette fonction sont mais il semble être nécessaire lors du calcul des tailles de composants Flex. Il y a un article informatif à ce sujet au judah's blog.

Bonne chance!

Mise à jour - Je suis tombé sur un article apparemment génial sur le cycle de vie des composants Flex à DevelopmentArc que j'ajoute à ma propre liste de lecture.

+0

Pour être juste, je n'ai pas travaillé sur un composant personnalisé autant que de jeter toutes les règles du livre sur le composant List standard, en essayant de le rendre conforme: P. J'ai abandonné maintenant et je suis prêt à tout arranger. Merci pour les idées Les quelques composants personnalisés de qualité que j'ai utilisés dans le passé semblent utiliser ce genre de méthodes, donc je vais essayer. Bravo pour les liens, et j'accepterai une réponse quand quelque chose fonctionne;). – orlade