• › Connexion
  • Blog RIA
Section separator

Catégories

  • Annonces
  • Concepts et Usages
  • Événements
  • 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
  • Retour sur le Visual Decision Forum’11 ! (vu 4 111 fois)
  • De l’art d’auto-compléter (en interaction clavier/souris) (vu 1 414 fois)
  • Flex 4 : Tour d’horizon sur les ItemRenderers (vu 1 391 fois)
  • Flex est mort, vive Flex ! (vu 1 234 fois)
  • Internationalisation & Localisation : Les nouveautés Flex 4.5 (vu 1 177 fois)
  • Sortie de Kalileo 2.4
  • TestRail : on l’a testé, on l’a adopté !
  • DB2 à la page dans Hibernate 4
  • Parsley fait peau neuve
  • Apache Flex Logo Contest : il n’en restera qu’un pour les gouverner tous !
  • Sphaxslayer dans Contest logo Apache Flex : Nos propositions
  • Anonyme dans Contest logo Apache Flex : Nos propositions
  • Pbergsma dans Contest logo Apache Flex : Nos propositions
  • Liens informatiques du mois – janvier 2012 | Gestion de projet et développement informatique dans Flex est mort, vive Flex !
  • Florian Fesseler dans Flexmojos : Quick compile mode

Auteurs

  • Alexis Kartmann (11)
  • Antoine Gehl (4)
  • Benoit Kogut-Kubiak (2)
  • Cyril Daloz (10)
  • Daniel Pesic (6)
  • Delphine Estebanez (4)
  • Fadi Mansour (3)
  • Florent Hirsch (1)
  • Florian Fesseler (13)
  • Gaétane Stavaux (3)
  • Guillaume Mignard (4)
  • Java Team (1)
  • Julien Revel (22)
  • Mahmoud Ramadan (1)
  • Matthieu Jobert (1)
  • Morgan Bruneau (1)
  • Stéphane Guyot (1)
  • Stéphane Koëth (2)
  • Thomas de Verdière (1)
  • Yann Graufogel (3)
Section separator

Tags

Adobe Business Exchange Adobe MAX AIR AMF AS3 Cairngorm Corporate Data Visualization Flex Framework JAVA Kap Inspect Kap Lab LCDS LiveCycle Mobile MVC PureMVC QA Reporting RIA RTMP Spark UX Web 2.0
Section separator

Archives

  • avril 2012 (1)
  • février 2012 (3)
  • janvier 2012 (5)
  • décembre 2011 (1)
  • novembre 2011 (2)
  • octobre 2011 (4)
  • août 2011 (2)
  • juillet 2011 (5)
  • juin 2011 (4)
  • mai 2011 (1)
  • mars 2011 (1)
  • janvier 2011 (1)
  • décembre 2010 (1)
  • novembre 2010 (3)
  • juin 2010 (1)
  • mars 2010 (1)
  • 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 (1)
  • janvier 2009 (3)
  • 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 (3)
  • avril 2007 (8)
  • mars 2007 (2)
  • février 2007 (1)

Marque-pages

  • Adobe Blogs
  • Adobe Developer Connection
  • Adobe Evangelists
  • Adobe Flex Tutorials (FR)
  • Code moi un mouton
Section separator

Kap IT

  • Site Web
  • Blog RIA
  • Kap Lab - Composants Flex
  • Kap Lab - Plugins Confluence

Blog RIA

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 (3)
, 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.

Catégories: Notes Techniques
Mots-clefs :Flex, focus, RIA, skin

Le commentaires sont fermés.

Article précédent
Article suivant
 
Haut de page

Copyright © 2009 Kap IT - Blog RIA - Kap Lab

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