Setting the accent color on the Spark Button control in Flex 4

The following example shows how you can set the accent color on the Spark Button control’s emphasized state in Flex 4 by setting the accentColor style and emphasized property.

The following example(s) require Flash Player 10 and the Adobe Flex 4 SDK. To download the Adobe Flash Builder 4 trial, see www.adobe.com/products/flex/. To download the latest nightly build of the Flex 4 SDK, see 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/2010/04/05/setting-the-accent-color-on-the-spark-button-control-in-flex-4/ -->
<s:Application name="Spark_Button_accentColor_test"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx">
    <s:controlBarContent>
        <mx:Form>
            <mx:FormItem label="accentColor:">
                <mx:ColorPicker id="clrPckr" selectedColor="red" />
            </mx:FormItem>
            <mx:FormItem label="emphasized:">
                <s:CheckBox id="chckBx" selected="true" />
            </mx:FormItem>
        </mx:Form>
    </s:controlBarContent>
 
    <s:Button id="btn"
            label="Spark Button label"
            accentColor="{clrPckr.selectedColor}"
            emphasized="{chckBx.selected}"
            horizontalCenter="0" verticalCenter="0" />
 
</s:Application>

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

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2010/04/05/setting-the-accent-color-on-the-spark-button-control-in-flex-4/ -->
<s:Application name="Spark_Button_accentColor_test"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx">
 
    <fx:Style>
        @namespace s "library://ns.adobe.com/flex/spark";
        @namespace mx "library://ns.adobe.com/flex/mx";
 
        s|Button {
            accentColor: red;
        }
    </fx:Style>
 
    <s:Button id="btn"
            label="Spark Button label"
            emphasized="true"
            horizontalCenter="0" verticalCenter="0" />
 
</s:Application>

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

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2010/04/05/setting-the-accent-color-on-the-spark-button-control-in-flex-4/ -->
<s:Application name="Spark_Button_accentColor_test"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/mx">
    <s:controlBarContent>
        <mx:Form>
            <mx:FormItem label="accentColor:">
                <mx:ColorPicker id="clrPckr"
                        change="styleThatButton(event);"/>
            </mx:FormItem>
            <mx:FormItem label="emphasized:">
                <s:CheckBox id="chckBx"
                        change="styleThatButton(event);"/>
            </mx:FormItem>
        </mx:Form>
    </s:controlBarContent>
 
    <fx:Script>
        <![CDATA[
            protected function styleThatButton(evt:Event):void {
                btn.setStyle("accentColor", clrPckr.selectedColor);
                btn.emphasized = chckBx.selected;
            }
        ]]>
    </fx:Script>
 
    <s:Button id="btn"
            label="Spark Button label"
            horizontalCenter="0" verticalCenter="0" />
 
</s:Application>

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.

3 thoughts on “Setting the accent color on the Spark Button control in Flex 4

  1. Hello Peter,

    I have run into one strange limitation.
    If I use default skin the ‘accentColor’ attribute works. But if I specify custom skin the ‘accentColor’ has no effect; even if I don’t change a single line in the default skin and simply add ‘skinClass’, the effect is gone.
    Is it expected behavior?

    Thanks,
    Igor

    1. @Igor Borodin,

      Ah, I think I see what the issue is. The Spark Button control with emphasized=true uses the spark.skins.spark.DefaultButtonSkin class instead of the spark.skins.spark.ButtonSkin class.

      <?xml version="1.0" encoding="utf-8"?>
      <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                     xmlns:s="library://ns.adobe.com/flex/spark"
                     xmlns:mx="library://ns.adobe.com/flex/mx">
          <s:layout>
              <s:VerticalLayout horizontalAlign="center" verticalAlign="middle" />
          </s:layout>
       
          <s:Button id="btn1"
                    label="Spark Button w/ accentColor"
                    accentColor="purple"
                    emphasized="true"
                    click="btn1.label = btn1.getStyle('skinClass').toString();"/>
       
          <s:Button id="btn2"
                    label="Spark Button w/ accentColor &amp; default skin"
                    accentColor="purple"
                    emphasized="true"
                    skinClass="spark.skins.spark.DefaultButtonSkin" />
       
          <s:Button id="btn3"
                    label="Spark Button w/ accentColor &amp; custom skin"
                    accentColor="purple"
                    emphasized="true"
                    skinClass="CustomBtnSkin" />
       
          <s:Button click="btn2.setStyle('accentColor', 'red'); btn2.emphasized = true;" />
       
      </s:Application>

      And my CustomBtnSkin.mxml file is a copy/paste of the DefaultButtonSkin.mxml skin.

      Peter

      1. Thank you for the clarification, Peter.
        This accentColor adds indeed very nice subtle color.
        Igor

Comments are closed.