28
Aug
07

Styling a Flex Button control using embedded fonts

The following example shows how you can customize the appearance of a Flex Button control by using an embedded font and removing the Button’s default skin.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2007/08/28/styling-a-flex-button-control-using-embedded-fonts/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    applicationComplete="init()"
    layout="vertical"
    verticalAlign="middle"
    backgroundColor="white">

    <mx:String id="fileName" />
    <mx:String id="fileSize" />

    <mx:Script>
        <![CDATA[
            private function init():void {
                var appInfo:LoaderInfo = Application.application.loaderInfo;
                /* Just grab the filename from the SWF URL. */
                fileName = (appInfo.url).split("/").pop();
                /* Convert bytes to kilobytes. */
                fileSize = (appInfo.bytesTotal / 1024).toFixed(2);
            }
        ]]>
    </mx:Script>

    <mx:Style>
        @font-face{
            src: url("./fonts/base02.ttf");
            fontFamily: "Base02";
        }

        .myButtonStyle {
            embedFonts: true;
            fontFamily: Base02;
            fontWeight: normal;
            fontSize: 24;
            cornerRadius: 0;
            letterSpacing: 4;
            textRollOverColor: red;
            skin: ClassReference(null);
            icon: Embed(source="./assets/iconInstall.png");
        }
    </mx:Style>

    <mx:ApplicationControlBar id="applicationControlBar" dock="true">
        <mx:Label id="info" text="{fileName} ({fileSize}kb)" />
    </mx:ApplicationControlBar>

    <mx:Button id="btn" label="{btn.getStyle('fontFamily')}" styleName="myButtonStyle" />

</mx:Application>

View source is enabled in the following example.

I didn’t include the TrueType font in the source code ZIP. If you want to grab that exact font, head over to the creator’s site @ http://www.stereo-type.net/ and download “Base 02″.


2 Responses to “Styling a Flex Button control using embedded fonts”


  1. 1 Eric Fields May 5th, 2008 at 7:53 am

    Is there any trick to getting a common Button to use embedded fonts? I’ve got the following:

    @font-face {
    src: url(”fonts/Arial.ttf”);
    fontFamily: ArialEmbedded;
    fontStyle: normal;
    fontWeight: normal;
    }
    Application {
    color: white;
    fontSize: 12px;
    fontFamily: ArialEmbedded;
    }

    And the Button text defaults to some gross serif font. So i tried

    Application, Button { …

    And still nothing. So I just tried

    Button {
    embedFonts: true;
    fontFamily: ArialEmbedded;…

    Still doesn’t pick up the font. Still the serif.

    Thank you.

  2. 2 peterd May 5th, 2008 at 8:33 am

    Eric Fields,

    The problem is that you only embedded the normal font weight for the Arial font, and by default the Button control’s label is bold. You have two options:
    1) Set the button’s label to use normal font weight instead of bold by setting the fontWeight style:

    <mx:Style>
        @font-face {
            src: url("fonts/Arial.ttf");
            fontFamily: ArialEmbedded;
            fontStyle: normal;
            fontWeight: normal;
        }
    
        Application {
            color: white;
            fontSize: 12px;
            fontFamily: ArialEmbedded;
        }
    
        Button {
            fontWeight: normal;
        }
    </mx:Style>
    

    2) Embed both the normal and bold font weights in your application:

    <mx:Style>
        @font-face {
            src: local("Arial");
            fontFamily: ArialEmbedded;
            fontStyle: normal;
            font-weight: normal;
        }
    
        @font-face {
            src: local("Arial");
            fontFamily: ArialEmbedded;
            fontStyle: normal;
            font-weight: bold;
        }
    
        Application {
            color: white;
            fontSize: 12px;
            fontFamily: ArialEmbedded;
        }
    </mx:Style>
    

    Peter

Leave a Reply

This blog is terrible at eating HTML tags. If you plan on posting code/XML, please escape your "<" characters as "&lt;" and your ">" characters as "&gt;".