Flex Tips – Label de largeur variable et troncature (truncateToFit)
Un petit article pour un petit "tip" sur Flex 3. Le problème se produit en fait lorsque l'on définit la largeur d'un label en pourcentage, comme par exemple:
<mx:Label text="This is a really long label" width="100%"/>
Si le conteneur qui est autour de ce composant Label est plus petit que la largeur du texte, celui-ci sera coupé de manière stricte. Le plus propre serait de tronquer le label en affichant "…" à la fin avec la valeur en toolTip. C'est ce qui se passe de base si vous donnez une largeur fixe au champ texte.
Il existe une propriété qui se nomme "truncateToFit" qui semble être la solution à tous nos problèmes. Seulement, si vous passez cette propriété à true, vous ne verrez aucun changement.
Il y a en revanche une solution trouvée par Daniel R. dans cet article:
Truncating labels that use a percentage width
La solution est en fait de donner une "minWidth" de 0 pour que le comportement soit correct. Vous n'avez en fait même pas besoin de la variable truncateToFit:
<mx:HBox width="100" horizontalScrollPolicy="off"> <mx:Label text="This is a very very very long text" width="100%" minWidth="0" /> </mx:HBox>
Détecter le click sur un lien dans un texte HTML (TextEvent.LINK)
Tutorial Flex écrit par Laurent Wroblewski (http://flex-ria.fr/)
Publiez vous aussi sur flex-tutorial!
Vous utilisez le composant Flex Label (ou les composants qui l'étendent, comme Text), et vous souhaitez pouvoir réagir à un clic sur une portion
de son contenu? Pas si simple!
Imaginons un label doté du texte suivant : "Ceci est un exemple de LIEN vers une image!". Vous souhaitez qu'un clic sur le mot "LIEN" entraîne l'affichage d'une image à l'écran. Pour ce faire, nous allons passer par la propriété htmlText du composant et utiliser des balises HTML <a> pour encadrer le mot "LIEN". Seul petit problème, en utilisant cette balise de manière traditionelle (ex : <a href='assets/test.jpg'>), un clic sur le texte redirigera la page vers le lien inséré (dans notre exemple, vers
l'image assets/test.jpg). Pas vraiment ce que nous voulons...
L'astuce ici est d'utiliser cette syntaxe :
<a href='event:assets/test.jpg'>
Ainsi, un clic sur le texte entraînera le dispatch d'un événement de type TextEvent.LINK depuis votre composant Label, que vous aurez tout loisir de capturer au sein d'un handler pour effectuer un traitement de votre choix.
IMPORTANT : pour qu'un événement de type TextEvent.LINK soit dispatché depuis un Label, la propriété selectable de celui-ci doit être à true.
<mx:Script> <![CDATA[ private function txtExemple_LinkHandler(evt:TextEvent):void { trace(evt.text); } private function txtExemple_InitializeHandler(evt:Event):void { this.txtExemple.htmlText = "Ceci est un exemple de <a href='event:assets/test.jpeg'>LIEN</a> vers une image!"; } ]]> </mx:Script> <mx:Text id="txtExemple" initialize="txtExemple_InitializeHandler(event)" link="txtExemple_LinkHandler(event)" selectable="true" />
Dans l'exemple ci-dessus, en imaginant que l'utilisateur clique sur le mot "lien" du texte du composant txtExemple, un événement de type TextEvent sera dispatché, dont la propriété text sera égale à assets/test.jpeg. Après, libre à vous d'effectuer le traitement que vous souhaitez.
L'exemple ci-dessous va créer une image dont l'url sera renseignée dans le lien, et l'afficher dans l'application à la position du pointeur de la souris.
Un second clic sur l'image fera disparaître celle-ci. Attention, pour que l'image se positionne correctement, il faut que son container (dans mon cas l'Application) ait un layout de type absolute (un Canvas par exemple).
private var _image:Image;
private function txtExemple_LinkHandler(evt:TextEvent):void
{
if (!this._image)
{
this._image = new Image();
this.addChild(this._image);
}
this._image.source = evt.text;
this._image.x = this.contentMouseX;
this._image.y = this.contentMouseY;
this._image.visible = this._image.includeInLayout = true;
this._image.useHandCursor = this._image.buttonMode = true;
this._image.addEventListener(MouseEvent.CLICK, image_ClickHandler, false, 0, true);
}
private function image_ClickHandler(evt:MouseEvent):void
{
this._image.visible = this._image.includeInLayout = false;
}
Exemple en ligne
Flex Source Code Download: Télécharger le code source complet de l'application
Flex 4 – Layout Mirroring pour texte right-to-left (Hébreu, Arabe, …)
Avant de partir en vacances une petite dizaine de jours (pas de blog donc ^^), voici une petite news de la part de la team Adobe Flex SDK.
La nouvelle Product Manager sur Flex, Deepa Subramaniam vient d'annoncer sur son blog une des nouveautés qui va arriver avec les prochaines release de Flex 4 (et oui, ils continuent à travailler dessus
). Cette nouvelle fonctionnalité est nommée "Layout Mirroring".
Elle sert à faire un effet "miroir" (pas un effet réflexion web 2.0) vertical pour les applications utilisant une mise en page qui doit être adaptée au texte qui s'écrivent de droite à gauche comme l'Hébreu ou l'Arabe.
Dans la pratique, cet effet miroir se traduit par une nouvelle propriété de style "layoutDirection" sur UIComponent. Celle-ci est par défaut à "ltr" (left-to-right, le standard Français / Anglais) mais vous pouvez la passer à "rtl". Notez que comme les autres propriétés de style, celle-ci se "cascade" dans votre application. C'est-à-dire qu'il suffit de mettre votre Application en layout "rtl" pour que cela se propage à tous les composants UIComponent de votre Application.
Toute cette manipulation se fait grâce au nouveau moteur de texte "Flash Text Engine" introduit dans Flex 4. Pour que toute votre application puisse avoir cet disposition miroir, il faut donc que tous vos composants utilisent ce FTE. Pour cela, il suffit de préciser dans les propriétés de compilation de votre projet Flex 4 "Use Flash Text Engine in Flex Components".
Spécifications sur le Layout Mirroring
Si vous voulez tester, il vous faut un des derniers build de Flex 4.1 disponible sur le site d'Adobe. En effet, vous aurez accès à cette fonctionnalité à partir de la release "4.1.0.15132".
Composant Flex – Texte Défilant type Marquee (ScrollingText)
Vous avez sûrement déjà vu sur des sites ayant des design type sites des années 80, ces textes défilants "Bienvenue sur mon site!". Pour cela, soit un peu de JavaScript, soit du html avec la balise marquee: <marquee>Bienvenue sur mon site!</marquee>. C'était plutôt affreux (à mon goût) mais admettons que vous vouliez créer le même effet dans votre application Flex, pour lui donner un air vintage peut-être.
Et bien Peter Ent a crée un composant permettant de faire ce texte défilant sous Flex. Ce composant est baptisé ScrollingFlex, voici un exemple de son utilisation:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:controls="com.keaura.controls.*"
creationComplete="{scrollinText.start();scrollinText2.start();}">
<controls:ScrollingText id="scrollinText" text="De gauche à droite" direction="leftToRight" speed="2" width="100%" height="30"/>
<controls:ScrollingText id="scrollinText2" text="De haut en bas" direction="topToBottom" speed="3" width="100%" height="30"/>
</mx:Application>
Flex Source Code Download: Télécharger le code source complet de l'application
Plusieurs paramètres sont à disposition:
- direction: les 4 directions sont possibles (gauche à droite, haut en bas ...)
- speed: vitesse de déplacement du texte
- text: le texte à faire défiler
Attention, n'oubliez pas de donner une height à votre composant, la hauteur de base est de 0 sinon et vous ne verrez rien. N'oubliez pas non plus de lancer le défilement avec la méthode start()





