Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

18juin/118

AIR Mobile – Application Pokémon (12) – Affichage des statistiques / Utilisation du composant PokemonStat

Dans le dernier tutorial, on a encapsulé notre barre de statistique dans un composant autonome:

AIR Mobile – Application Pokémon (11) – Affichage des statistiques / Création d'un composant

Au final, vous vous êtes retrouvé avec exactement le même rendu, sauf que vous aviez un composant. On va voir dans cette partie comment utiliser ce composant pour afficher les 6 statistiques de notre Pokémon.

Ajout des 6 composants PokemonStat

Dans la vue PokemonDetailsView, ajoutez 6 fois le composant PokemonStat en liant chaque composant à une propriété de votre objet Pokemon:

...
  <s:Image id="img" />
  <views:PokemonStat title="Vie" statValue="{_p.pv}" />
  <views:PokemonStat title="Vitesse" statValue="{_p.vit}" />
  <views:PokemonStat title="Attaque" statValue="{_p.atk}" />
  <views:PokemonStat title="Défense" statValue="{_p.def}" />
  <views:PokemonStat title="Attaque Spé." statValue="{_p.atkspe}" />
  <views:PokemonStat title="Défense Spé." statValue="{_p.defspe}" />
</s:View>
...

Lancez votre application et vous obtenez:

sixc

…Hum, ce n'est pas vraiment le résultat que l'on espérait obtenir. Les composants sont en fait empilés les un au dessus des autres. Pourquoi? Car le composant qui les contient (View) est basé sur Group, qui est un composant qui ne donne aucune contrainte de base à ses enfants.

Modification du layout de la View

Pour y voir plus clair, on va mettre une mise en page verticale. Pour cela, on va préciser la propriété "layout" de notre vue. Cela peut être fait directement dans le MXML. On va assigner à cette propriété, un objet de type VerticalLayout:

...
  </fx:Script>
  <s:layout>
    <s:VerticalLayout />
  </s:layout>
  <s:Image id="img" />
...

Relancez votre application, voilà le résultat:

stack

C'est déjà mieux. Mais vous pouvez constater que l'on réserve beaucoup de place pour chaque statistique. On pourrait en rentrer 2 par lignes sans problème. C'est ce que nous allons faire.

Pour cela, on va encapsuler nos statistiques dans un conteneur de type Group. A ce conteneur, on va aussi assigner un "layout". Cette fois-ci, il ne sera pas de type VerticalLayout mais de type TileLayout. Un TileLayout réalise une mise en page en "grille":

...
  <s:Group width="100%" height="100%">
    <s:layout>
      <s:TileLayout requestedColumnCount="2" columnAlign="justifyUsingWidth" verticalGap="8" />
    </s:layout>
    <views:PokemonStat title="Vie" statValue="{_p.pv}" />
    <views:PokemonStat title="Vitesse" statValue="{_p.vit}" />
    <views:PokemonStat title="Attaque" statValue="{_p.atk}" />
    <views:PokemonStat title="Défense" statValue="{_p.def}" />
    <views:PokemonStat title="Attaque Spé." statValue="{_p.atkspe}" />
    <views:PokemonStat title="Défense Spé." statValue="{_p.defspe}" />
  </s:Group>
...

Vous remarquerez que l'on a spécifié certains arguments sur l'objet TileLayout comme columnAlign ou requestedColumnCount. Voici le détail:

  • requestedColumnCount : indique que l'on veut une mise en page sur 2 colonnes exactement. On ne spécifie pas le nombre de ligne, il y en aura autant que besoin
  • columnAlign : Permet de réaliser un "100%" sur la largeur. On indique à la mise en page qu'elle doit prendre toute la largeur. D'autres valeurs de paramètres sont disponibles, n'hésitez pas à les essayer
  • verticalGap : Permet de spécifier quel espace (en pixels) sera laissé entre les enfants du Group

Voici le résultat:

tiled

Vous avez vu dans ce tutorial que grâce à la création d'un composant PokemonStat, vous avez pu factoriser les développements de manière rapide. Le code de la vue en est aussi soulagé. Pour l'instant, on affiche seulement la valeur sur une barre rouge.

Dans la partie suivante, on va modifier l'apparence (couleur) et la taille de la barre, en fonction de la valeur passée au composant.

Articles similaires

Commentaires (8) Trackbacks (1)
  1. Excellent tout ça …
    Ça confirme un peu ma façon de travailler avec Flex tout en mettant un pied dans la version mobile.
    Par contre je trouve les composants mal fournis pour les version mobiles et voir inexistants pour les tablettes (Fragment notamment), du coup sur certains projets je passe en mode Android "Brut".
    Vivement les prochaines versions qui, je l’espère, seront mieux fournis.

    Sinon, la suite vite … ^^

  2. Salut,
    Alors je suis pas un pro de l'Android natif mais la dernière fois que j'ai entendu parler de Fragment, c'était à la Google IO et je me suis dit "OK, il ont pris le mot composant et ils l'ont appelé Fragment", non ?
    Quels genre de composants souhaiterais-tu avoir ?

    Fabien

  3. Et bien je souhaiterai faire des applis pour tablettes, donc une liste à gauche et a droite le détails de mon item (avec éventuellement une seconde liste entre la première et le détails). Je sais qu'en Flex/Air ça fonctionne parfaitement mais là ou je suis moins convaincu c'est dans la version Mobile.

  4. Je vois pas trop le problème pour le faire en version tablette avec Flex 4.5?

    Fabien

  5. C'est pas un 'vrai' problème c'est une question de composants et de rendu. En effet, je ne suis pas sur que les composants 'TabbedViewNavigatorApplication' et les différents renderer spécial Mobile (IconItemRenderer …) soient adapté sur tablette la surface étant beaucoup plus large on risque une mauvaise utilisation de l'espace.

    http://www.androidpolice.com/wp-content/uploads/2011/03/gmail-tablet.png Sur cette image on a une liste a gauche avec une autre liste à droite, des composants dans le Header et si on clique sur un item, la liste de gauche se décale a droite laissant apparaitre le 'DetailView'.
    L'idée serait de reproduire la même chose en Flex, avec le même rendu et les même capacité de personnalisation.
    Au regard des tutos et des composants mobile, j'ai peur que rien que le 'header' flex soit le même que pour des applis mobile (Gris avec de quoi mettre un titre, un bouton Home a gauche et retour a droite) et 3 'Méga' boutons en bas en guise de TabNavigator.

    Donc, selon toi ? Faut-il attendre de Nouveaux composants ? Utiliser les composants Spark Flex/air natif dans un projet de type Mobile ? Ne pas utiliser Flex pour les tablettes.

  6. Salut,
    Je ne peux malheureusement pas en dire beaucoup plus (confid.) mais tu peux t'attendre à de nouveaux composants, Flex évolue en permanence.
    En tout cas, pour faire des templates perso, c'est toujours possible. Il suffit de prendre une Application et pas ViewNavigatorApplication. Dedans, tu peux mettre 2 VNA si tu veux ou juste une liste ou tout ce que tu veux en fait. Les templates de base sont uniquement là pour guider. Après, si tu veux faire cette interface à la GMail, c'est déjà possible.

    Tout ne peux pas être prévu dans les paramétrages par défaut, et c'est presque tant mieux :) .

    Fabien

  7. Merci pour ses infos.
    Donc, étant plus efficace en Flex qu'en Android, je vais tenter de faire mon appli en utilisant les composants de base et des templates persos.
    PS: Je viens de voir tomber une news sur la version iOS de Flex mobile [Content] ^^

  8. Oui, et ce n'est que le début ;)

    Fabien


Leave a comment

(required)