The following example shows how you can use an embedded font with the Flex TabBar control by setting the fontFamily and fontWeight styles.

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/06/07/using-an-embedded-font-with-the-tabbar-control-in-flex/ -->
<mx:Application name="TabBar_fontFamily_test"
        xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Style>
        @font-face {
            src: local("Base 02");
            fontFamily: EmbeddedBase02;
            fontWeight: bold;
        }
    </mx:Style>

    <mx:VBox id="vBox"
            verticalGap="0"
            width="320"
            height="200">
        <mx:TabBar id="tabBar"
                dataProvider="{viewStack}"
                fontFamily="EmbeddedBase02"
                width="100%" />
        <mx:ViewStack id="viewStack"
                width="100%"
                height="100%"
                backgroundColor="white">
            <mx:VBox label="One">
                <mx:Label text="one..." />
            </mx:VBox>
            <mx:VBox label="Two">
                <mx:Label text="two..." />
            </mx:VBox>
            <mx:VBox label="Three">
                <mx:Label text="three..." />
            </mx:VBox>
            <mx:VBox label="Four">
                <mx:Label text="four..." />
            </mx:VBox>
            <mx:VBox label="Five">
                <mx:Label text="five..." />
            </mx:VBox>
        </mx:ViewStack>
    </mx:VBox>

</mx:Application>

View source is enabled in the following example.

You can also set the fontFamily style in an external .CSS file or <mx:Style /> block, as seen in the following example:

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/06/07/using-an-embedded-font-with-the-tabbar-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Style>
        @font-face {
            src: local("Base 02");
            fontFamily: EmbeddedBase02;
            fontWeight: bold;
        }

        TabBar {
            fontFamily: EmbeddedBase02;
        }
    </mx:Style>

    <mx:VBox id="vBox"
            verticalGap="0"
            width="320"
            height="200">
        <mx:TabBar id="tabBar"
                dataProvider="{viewStack}"
                width="100%" />
        <mx:ViewStack id="viewStack"
                width="100%"
                height="100%"
                backgroundColor="white">
            <mx:VBox label="One">
                <mx:Label text="one..." />
            </mx:VBox>
            <mx:VBox label="Two">
                <mx:Label text="two..." />
            </mx:VBox>
            <mx:VBox label="Three">
                <mx:Label text="three..." />
            </mx:VBox>
            <mx:VBox label="Four">
                <mx:Label text="four..." />
            </mx:VBox>
            <mx:VBox label="Five">
                <mx:Label text="five..." />
            </mx:VBox>
        </mx:ViewStack>
    </mx:VBox>

</mx:Application>

Or, you can set the fontFamily style using ActionScript, as seen in the following example:

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/06/07/using-an-embedded-font-with-the-tabbar-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Style>
        @font-face {
            src: local("Base 02");
            fontFamily: EmbeddedBase02;
            fontWeight: bold;
        }
    </mx:Style>

    <mx:Script>
        <![CDATA[
            private function init():void {
                tabBar.setStyle("fontFamily", "EmbeddedBase02");
            }
        ]]>
    </mx:Script>

    <mx:VBox id="vBox"
            verticalGap="0"
            width="320"
            height="200">
        <mx:TabBar id="tabBar"
                dataProvider="{viewStack}"
                width="100%"
                initialize="init();" />
        <mx:ViewStack id="viewStack"
                width="100%"
                height="100%"
                backgroundColor="white">
            <mx:VBox label="One">
                <mx:Label text="one..." />
            </mx:VBox>
            <mx:VBox label="Two">
                <mx:Label text="two..." />
            </mx:VBox>
            <mx:VBox label="Three">
                <mx:Label text="three..." />
            </mx:VBox>
            <mx:VBox label="Four">
                <mx:Label text="four..." />
            </mx:VBox>
            <mx:VBox label="Five">
                <mx:Label text="five..." />
            </mx:VBox>
        </mx:ViewStack>
    </mx:VBox>

</mx:Application>

Due to popular demand, here is the “same” example in a more ActionScript friendly format:

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/06/07/using-an-embedded-font-with-the-tabbar-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        xmlns:comps="comps.*"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <comps:MyComp />

</mx:Application>

comps/MyComp.as

package comps {
    import mx.containers.VBox;
    import mx.containers.ViewStack;
    import mx.controls.Label;
    import mx.controls.TabBar;
    import mx.core.Container;

    public class MyComp extends VBox {
        [Embed(systemFont="Base 02",
                fontName="EmbeddedBase02",
                fontWeight="bold",
                advancedAntiAliasing="true",
                mimeType="application/x-font")]
        private var EmbeddedBase02:Class;

        public var tabBar:TabBar;
        public var viewStack:ViewStack;
        public var child1:Container;
        public var child2:Container;
        public var child3:Container;
        public var child4:Container;
        public var child5:Container;

        public function MyComp() {
            super();
            init();
        }

        private function init():void {
            setStyle("verticalGap", 0);
            width = 320;
            height = 240;

            var label1:Label;
            var label2:Label;
            var label3:Label;
            var label4:Label;
            var label5:Label;

            label1 = new Label();
            label1.text =  "one...";

            label2 = new Label();
            label2.text =  "two...";

            label3 = new Label();
            label3.text =  "three...";

            label4 = new Label();
            label4.text =  "four...";

            label5 = new Label();
            label5.text =  "five...";

            child1 = new VBox();
            child1.label = "One";
            child1.addChild(label1);

            child2 = new VBox();
            child2.label = "Two";
            child2.addChild(label2);

            child3 = new VBox();
            child3.label = "Three";
            child3.addChild(label3);

            child4 = new VBox();
            child4.label = "Four";
            child4.addChild(label4);

            child5 = new VBox();
            child5.label = "Five";
            child5.addChild(label5);

            viewStack = new ViewStack();
            viewStack.percentWidth = 100;
            viewStack.percentHeight = 100;
            viewStack.setStyle("backgroundColor", "white");
            viewStack.addChild(child1);
            viewStack.addChild(child2);
            viewStack.addChild(child3);
            viewStack.addChild(child4);
            viewStack.addChild(child5);
            addChild(viewStack);

            tabBar = new TabBar();
            tabBar.dataProvider = viewStack;
            tabBar.percentWidth = 100;
            tabBar.setStyle("fontFamily", "EmbeddedBase02");
            addChildAt(tabBar, 0)
        }
    }
}

And finally, if you wanted to use a normal font weight instead of the default bold font weight, you could use the following snippet:

<mx:Style>
    @font-face {
        src: local("Base 02");
        fontFamily: EmbeddedBase02;
        fontWeight: normal;
    }

    TabBar {
        fontFamily: EmbeddedBase02;
        tabStyleName: normalTabStyleName;
        selectedTabTextStyleName: normalTabStyleName;
    }

    .normalTabStyleName {
        fontWeight: normal;
    }
</mx:Style>

Base 02 font by www.stereo-type.net.

 
Tagged with:
 
About The Author

Peter deHaan

Peter deHaan currently works for Adobe on the Flex SDK QA team. While not working on Flex, Flash, and ColdFusion applications, Peter enjoys making up bios and writing in 3rd person. Peter's rarely updated blog can be found at blogs.adobe.com/pdehaan/, actionscriptexamples.com, airexamples.com, and coldfusionexamples.com.

0 Responses to Using an embedded font with the TabBar control in Flex

  1. Alex says:

    I really love this blog, you give really good examples of really good thing, I have you on my feed also, just thought it would be nice to tell you thanks.

  2. Toby says:

    I really love this blog,too.And I have your blog on my blog : “http://blog.youxibo.com/” I will come everyday and study with you,thanks for your help.

  3. vigil says:

    It is possible to create multiple rows in the tabBar and let’s say limit one row to 4 tabs?

  4. peterd says:

    vigil,

    Check out FlexLib project’s SuperTabBar control and SuperTabNavigator container at http://code.google.com/p/flexlib/wiki/ComponentList.

    Peter

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree