• › Connexion
  • Blog RIA.do.be
  • Blog Web2Entreprise
Section separator

Catégories

  • Annonces
  • Évènements
  • Concepts et Usages
  • Général
  • Notes Techniques
  • Références
Adobe EMEA Silver Solution Partner Section separator

Abonnement

  • RSS Articles Articles (RSS)
  • RSS Articles Commentaires (RSS)
  • RSS mail Articles (Email)
  • Populaires
  • Récents
  • Commentaires
  • Premiers Retours sur l’Adobe MAX 2009 (vu 13 006 fois)
  • Comment forcer les styles des composants Flex/AS3 d’une librairie SWC réutilisable (vu 5 773 fois)
  • Utiliser le framework Cairngorm pour Flex 2 (1/4) (vu 5 433 fois)
  • Architecture MVC: Cairngorm ou PureMVC ? (vu 3 257 fois)
  • Le problème du ModelLocator Cairngorm (vu 3 067 fois)
Articles récents
  • Ouverture des inscriptions pour le webinar ConfluenceFx
  • Développeur, Communicant, Designer ou Ergonome ? Changez pour Kap IT
  • Application AIR : Comment Sauvegarder/Charger un Document et lui Associer une Extension ?
  • Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • Premiers Retours sur l’Adobe MAX 2009
Commentaires récents
  • Fadi Mansour dans Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • nico dans Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • Florian dans Application AIR : Comment Sauvegarder/Charger un Document et lui Associer une Extension ?
  • Fadi Mansour dans Comment intégrer une application Flex dans une application Flash ou AS3
  • yoann dans Comment intégrer une application Flex dans une application Flash ou AS3

Auteurs

  • Alexis Kartmann (12)
  • Benoit Kogut-Kubiak (2)
  • Christoher Bograt (1)
  • Cyril Daloz (7)
  • Daniel Pesic (5)
  • Fadi Mansour (3)
  • Florian Fesseler (1)
  • Guillaume Mignard (2)
  • Jean de Laulanié (2)
  • Julien Revel (19)
  • Mahmoud Ramadan (1)
  • Matthieu Jobert (1)
  • Stéphane Guyot (1)
  • Stéphane Koëth (2)
  • Yann Graufogel (2)
Section separator

Tags

Cairngorm Framework compilation fds Kap Lab kapinspect AIR Adobe MAX MVC actionscript Kap IT RIA JVM LCDS Flex PureMVC livecycle AS3 skin Web 2.0 RTMP builder AMF Corporate BlazeDS
Section separator

Archives

  • février 2010 (1)
  • décembre 2009 (2)
  • novembre 2009 (1)
  • octobre 2009 (3)
  • septembre 2009 (1)
  • août 2009 (1)
  • avril 2009 (2)
  • février 2009 (2)
  • janvier 2009 (4)
  • décembre 2008 (4)
  • novembre 2008 (2)
  • octobre 2008 (2)
  • septembre 2008 (2)
  • août 2008 (1)
  • juin 2008 (1)
  • avril 2008 (4)
  • mars 2008 (3)
  • février 2008 (2)
  • janvier 2008 (1)
  • décembre 2007 (3)
  • novembre 2007 (1)
  • septembre 2007 (1)
  • juillet 2007 (1)
  • juin 2007 (1)
  • mai 2007 (4)
  • avril 2007 (8)
  • mars 2007 (2)
  • février 2007 (1)

Marque-pages

  • Adobe Labs
  • AStrois Blog
  • Code moi un mouton
  • Coma Informatique
Section separator

Kap IT

  • Site Web
  • Blog Web2Entreprise
  • Blog RIA.do.be
  • Lab

Blog RIA.do.be

Veille, Recherche et Développement RIA Flex-AS3-LiveCycle

Une bonne gestion du focus dans vos applications Flex

Par Yann GraufogelgravatarFermerAuteur : Yann Graufogel Email : ygraufogel@kapit.fr
Site : http://www.kapit.fr
A propos : Voir les autres billets de l'auteur (2)
, publié le 20 janvier 2009

La gestion du focus est un point important à considérer pour plusieurs raisons :

  • La représentation du focus à l’utilisateur est un feedback pour aider au répérage.
  • Cela augmente l’accessibilité des applications.
  • Les designers qui ne sont pas habitués à de l’applicatif négligent souvent ce point.
  • Ce détail fait partie intégrante d’une interface. Flex gère de façon native le focus. Il le donne par défaut au premier élément cliquable de la DisplayList. Il le propage ensuite de composant en composant en parcourant l’arbre. L’élément possédant le focus est identifiable grâce à un halo bleu autour de lui. On notera que si on veut enlever tout simplement cet effet, il suffit de spécifier la focusSkin du composant comme ceci :
Button {
focusSkin : ClassReference("mx.skin.ProgrammaticSkin");
}

Par contre, dans le cas d’une application entièrement reskinnée, il conviendra de prendre aussi en compte le design du focus (le bleu ciel d’Adobe s’intègrant mal avec un design recherché…)

Skinning

Commençons par ce point pendant que le sujet est chaud. Flex gère l’affichage du focus par l’intermédiaire de la propriété de style focusSkin comme nous l’avons vu plus haut. Par défaut, c’est la skin du framework qui est utilisée. Il est possible de redéfinir cette skin directement dans vos mxml ou bien dans un fichier css à part. FocusSkin est une classe qui doit hériter de ProgrammaticSkin (ou HaloBorder). Il faut imaginer la skin du focus comme un calque transparent par dessus le composant. “Overridez” la méthode updateDisplayList comme pour n’importe quelle autre skin programmatic et vous pouvez commencer votre création :

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
g.clear();
var color : uint	= this.getStyle("focusColor");
g.lineStyle(1, color);
g.drawRect(0, 0, unscaledWidth, unscaledHeight)
}

Vous avez ainsi (c’est un exemple basique) une représentation du focus avec une couleur dynamique définie dans votre fichier css. Ceci étant dit, passons à la gestion du focus en lui-même.

Paramétrage

Premièrement, il convient d’identifier exactement les écrans sur lequel on souhaite autoriser le focus à se propager. Une application contient généralement un menu ou un footer ou encore des éléments présents tout au long de la navigation mais qui ne rentre pas forcément dans le worflow métier. Dans les composants les plus hauts de la DisplayList, ceux servant à faire les premiers gros découpages de votre application, nous allons forcer Flex à ne pas leur donner le focus. Les propriétés tabEnabled et tabChildren mis à “false” vont permettre cela. Cela nous autorise donc à restreindre la navigation avec la touche “tab” aux seuls composants réellement métier de l’application. Maintenant, il reste à forcer le focus au premier élément cliquable de chaque écran sur lequels on souhaite naviguer de façon précise avec le clavier. Pour cela, deux lignes de code supplémentaire que l’on pourra ajouter dans le handler de l’évènement show de l’écran par exemple :

private function _onShow() : void{
firstInput.setFocus();
firstInput.drawFocus(); //Force the framework to draw the custom focus skin
}

tabIndex

Cette propriété permet de surcharger l’ordre de navigation. Sauf dans le cas d’écran spécifique, il convient de laisser Flex gérer ce point. En effet, Flex arrête de propager le focus sur les composants non visibles ou désactivés. A partir du moment ou on décide de forcer le tabIndex, il faudra aussi gérer manuellement ce genre de cas.

Interaction avec le navigateur

Par défaut, lorsque le dernier élément de la displayList perd le focus, c’est le premier qui le reprend. Un seul navigateur n’applique pas ce principe, vous avez gagné, c’est Internet Explorer. Ce dernier récupère le focus pour lui, il faudra donc 3 ou 4 appuis supplémentaire sur la touche “tab” pour redonner le focus au Flash Player. Pour remédier à ce problème, il faut faire deux choses : - Ajouter les deux bouts de code javascript et actionscript disponibles ici ; - Appliquer le patch SDK-18150 d’Adobe afin de faire fonctionner correctement la méthode getNextFocusManagerComponent(). De plus, l’exécution de la méthode getNextFocusManagerComponent avec le paramètre backward à “true” donne le focus à l’avant-dernier composant et non au dernier. Il faut donc ajouter une ligne dans le code AS… :

private function _callMe(name:String):void{
if (name == "false") {
focusManager.getNextFocusManagerComponent().setFocus();
} else {
// the combination of  SHIFT+TAB has been pressed
focusManager.getNextFocusManagerComponent(true).setFocus();
focusManager.getNextFocusManagerComponent().setFocus(); //Bug with backward=true
}
}

Voici une petite application simple afin d’illustrer cet article (le hack pour gérer la navigation correctement sous IE n’a pas été implémenté dans cet exemple) :

This movie requires Flash Player 9

Pour être complet, il faudrait aussi redéfinir les up-skin, down-skin et over-skin afin d’enlever complètement la skin Halo (bleu) de Flex.

Articles relatifs

  • Utiliser le framework Cairngorm pour Flex 2(3/4) (1)
  • Utiliser le framework Cairngorm pour Flex 2 (4/4) : Remarques et Add-On (6)
  • Utiliser le framework Cairngorm pour Flex 2 (2/4) (1)
  • Utiliser le framework Cairngorm pour Flex 2 (1/4) (7)
  • Une présentation RIA à voir ! (0)
Catégories: Notes Techniques
Tags: Flex, focus, getnextfocusmanagercomponent, RIA, skin, tab

Laisser une réponse

Cliquer ici pour annuler la réponse.

Article précédent
Article suivant
 
Haut de page

Copyright © 2009 Kap IT - Blog RIA - Blog Web2Entreprise - Kap Lab

Motorisé par Wordpress - Thème avec YAML par Kap IT