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

28déc/094

Flex Tips – Embed Font sur un TextField qui n'apparait pas

Un mini-post qui pourrait aider quelques Flexeurs sur un comportement assez étrange quand on utilise des polices embarquées (Embedded). Le code parait bon, pas d'erreur de compilation ni d'exécution mais pourtant le texte n'apparaît pas. J'ai bloqué une petite demi-heure sur ce bug stupide, cela vous arrivera peut-être ^^.

Voici le code que j'avais (réduit):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="onCreationComplete();"
                xmlns:comp="comp.*"
                xmlns:local="*">
  <mx:Script>
    <![CDATA[
      import com.bg.BasicFontAssets;
      [Embed(systemFont='Arial', fontName='ArialR', mimeType='application/x-font', unicodeRange="U+0020-U+002F,  U+0030-U+0039, U+003A-U+0040, U+0041-U+005A,U+005B-U+0060, U+0061-U+007A, U+007B-U+007E,U+20AC-U+20AC,  U+00A3-U+00A3, U+00B2-U+00B2,U+00F9-U+00F9,  U+00E0-U+00F6")]
      public static var ArialR:Class;

      private function onCreationComplete():void {
        var format:TextFormat = new TextFormat;
        format.font = "ArialR";
        format.color = 0xFFFFFF;
        format.size = 20;

        var tf:TextField = new TextField;
        tf.embedFonts = true;
        tf.autoSize = TextFieldAutoSize.LEFT;
        tf.antiAliasType = AntiAliasType.ADVANCED;
        tf.text = "Text de test";
        tf.defaultTextFormat = format;
        uiComp.addChild(tf);
      }
    ]]>
  </mx:Script>
  <mx:UIComponent id="uiComp"
                  rotation="10"/>
</mx:Application>

Tout parait OK et pourtant rien de s'affiche. Le bug se situe en fait au moment de l'assignation du "defaultTextFormat". Celle-ci (qui indique que le font est Embed), est faite après l'assignation de la propriété "text". Pour résoudre ce bug, il suffit de:

  • Assigner "defaultTextFormat" avant "text"
  • ou faire l'assignation à la main: tf.setTextFormat(format).

A ce moment-là, votre champ texte va apparaître avec votre texte et vous pouvez passez au bug suivant :) .