The following example shows how you can style the data tip on a Spark HSlider control in Flex 4 by creating a custom skin and setting the skinClass style.

Full code after the jump.

The following example(s) require Flash Player 10 and the Adobe Flex 4 SDK. To download the Adobe Flash Builder 4 trial, see http://www.adobe.com/products/flex/. To download the latest nightly build of the Flex 4 SDK, see http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4.
For more information on getting started with Flex 4 and Flash Builder 4, see the official Adobe Flex Team blog.

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2009/05/18/styling-the-data-tip-on-a-spark-hslider-control-in-flex-gumbo/ -->
<s:Application name="Spark_HSlider_skinClass_dataTip_test"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/halo">
 
    <s:HSlider id="slider"
            skinClass="skins.CustomHSliderSkin"
            horizontalCenter="0"
            verticalCenter="0" />
 
</s:Application>

The custom skin class, skins/CustomHSliderSkin.mxml, is as follows:

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2009/05/18/styling-the-data-tip-on-a-spark-hslider-control-in-flex-gumbo/ -->
<s:SparkSkin name="CustomHSliderSkin"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        minHeight="11" alpha.disabled="0.5">
    <s:states>
        <s:State name="normal" />
        <s:State name="disabled" />
    </s:states>
 
    <fx:Metadata>
    <![CDATA[
        [HostComponent("spark.components.HSlider")]
    ]]>
    </fx:Metadata>
 
    <fx:Script>
        /* Define the skin elements that should not be colorized.
           For slider, the skin itself is colorized but the individual parts are not. */
        static private const exclusions:Array = ["track", "thumb"];
 
        override public function get colorizeExclusions():Array {
            return exclusions;
        }
 
        override protected function measure() : void {
            // Temporarily move the thumb to the left of the Slider so measurement
            // doesn't factor in its x position. This allows resizing the
            // HSlider to less than 100px in width.
            var thumbPos:Number = thumb.getLayoutBoundsX();
            thumb.setLayoutBoundsPosition(0, thumb.getLayoutBoundsY());
            super.measure();
            thumb.setLayoutBoundsPosition(thumbPos, thumb.getLayoutBoundsY());
        }
    </fx:Script>
 
    <fx:Declarations>
        <!--- Defines the appearance of the the Slider's DataTip. To customize the DataTip's appearance, create a custom HSliderSkin class. -->
        <fx:Component id="dataTip">
            <s:DataRenderer minHeight="24" minWidth="40" y="-34">
                <s:Rect top="0" left="0" right="0" bottom="0">
                    <s:fill>
                        <s:SolidColor color="haloBlue" alpha="0.9" />
                    </s:fill>
                    <s:filters>
                        <s:DropShadowFilter angle="90" color="0x999999" distance="3" />
                    </s:filters>
                </s:Rect>
                <s:Label id="labelDisplay" text="{data}"
                        horizontalCenter="0" verticalCenter="1"
                        left="5" right="5" top="5" bottom="5"
                        textAlign="center" verticalAlign="middle"
                        fontWeight="normal" color="black" fontSize="16" />
            </s:DataRenderer>
        </fx:Component>
    </fx:Declarations>
 
    <!--- Defines the skin class for the HSliderSkin's track. The default skin class is HSliderTrackSkin. -->
    <s:Button id="track"
            skinClass="spark.skins.spark.HSliderTrackSkin"
            left="0" right="0" top="0" bottom="0"
            minWidth="33" width="100" />
 
    <!--- Defines the skin class for the HSliderSkin's thumb. The default skin class is HSliderThumbSkin. -->
    <s:Button id="thumb"
            skinClass="spark.skins.spark.HSliderThumbSkin"
            top="0" bottom="0"
            width="11" height="11" />
 
</s:SparkSkin>

View source is enabled in the following example.

This entry is based on a beta version of the Flex 4 SDK and therefore is very likely to change as development of the Flex SDK continues. The API can (and will) change causing examples to possibly not compile in newer versions of the Flex 4 SDK.

 
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.

14 Responses to Styling the data tip on a Spark HSlider control in Flex 4

  1. lee probert says:

    Some changes since SDK 4.0.08945 …

    is now gone. Not sure why this was necessary anyway.
    Throws an error with ‘data’ now. Not sure how to get this property. Can’t see anything in the latest docs. I’m assuming you need to reference the parent component. Any ideas?

    • Peter deHaan says:

      @lee,

      Yes. A lot of churn has happened since I wrote this initially. I’ve been trying to go back through all my old Spark-based examples and update them to the latest APIs, but I still have about 150+ Spark/Gumbo examples to test, fix, update, and ideally post SWFs.

      Anyways, down to business…
      1) Never trust examples on this site will work. ;)
      2) Always use the latest Flex 4 SDK possible: http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4
      3) Always check http://opensource.adobe.com/wiki/display/flexsdk/Rename+List for known API renames. Admittedly, I never really said which build of the SDK this once worked on, but we had a massive API rename around build 4.0.0.7756 (around June 11-18, 2009 — I believe).
      Looking at that page it seems that spark.components.MXMLComponent was renamed to spark.components.DataRenderer. Unfortunately, the beta Flex 4 LangRef still shows MXMLComponent as an valid class: http://livedocs.adobe.com/flex/gumbo/langref/spark/components/package-detail.html. (The LangRef was last updated for beta1 [I believe] and was built on Thu May 21 2009, a few weeks before the API renames.)
      4) Which brings us to #4. See #2. Always download the latest nightly builds. Around June 24, 2009 we started including Language Reference ZIPs for each nightly build. So if you want to see the latest Language Reference documentation to go with your latest Flex 4 SDK, then download the Lang Ref ZIP and unzip it locally.

      Peter

  2. lee probert says:

    comment got chewed … MXMLComponent class is now gone.

    • Peter deHaan says:

      @lee,

      Yes. This blog is terrible at eating HTML/MXML/XML tags. You need to escape < as &lt; and > as &gt;
      I need to put that big disclaimer back up on the site.

      Peter

  3. arten says:

    Hi,

    I’ve been trying to skin a slider but I always get the same error: Required skin part track cannot be found.
    I’ve been debugging and it seems that de datatip skinpart is not found…

    This is the code of the slider’s skinclass:

    Any idea how to fix it ?

  4. Peter deHaan says:

    Updated example to Flex SDK 4.0.0.10008 (s:SimpleText is now s:Label).

    Peter

  5. PK says:

    This seems to work thanks for your help. I love this blog it’s full of great Flaex 4.0 stuff.

  6. miny says:

    is it possible to always show de dataTip?

    • Tony says:

      Can/did anyone answer the question “is it possible to always show the dataTip?” I would also like a solution for this.

      Thanks!

      Tony

  7. piyush says:

    how can i increase thickness of this Hslider. I want to increase height of that line in which thumb moves left to right…

  8. piyush says:

    Tony…

    please refer http://blog.flexexamples.com/2007/09/11/customing-the-flex-hslider-and-vslider-controls/

    hope u ll find your answer in this site…

  9. KJ says:

    Is there a way to style the datatip with CSS?

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