In diesem Beitrag zum Flex 4 SDK wird die neue Komponentenarchitektur deutlich. Es wird gezeigt, wie man ein eigenes Skin für eine Spark-Applikation (s:Application) erstellt. Das Skin liegt in einer eigenen MXML-Datei und ersetzt den Hintergrund durch ein gekacheltes Hintergrundbild.

In einer Halo-Applikation (mx:Application) gibt es die Eigenschaft backgroundImage. Diese wurde jedoch in Flex 4 abgeschafft, was es im ersten Schritt etwas kompliziert macht, einer Anwendung ein Hintergrundbild zu geben. Der Grund ist, dass Application schlanker und mit weniger Overhead gehalten werden sollte.

Dank der neuen Skinning-Möglichkeiten ist trotzdem recht einfach zu erledigen und gewissermaßen auch konsequent, wenn ein Hintergrundbild über Skinning realisiert wird. Die Erstellung des obigen Beispiel wird im Folgenden erklärt.

Klasse für das Skinning zuweisen

Zuerst ordnet man der Applikation über skinClass einer Klasse zu. Hier im Beispiel ist es skin.SkinBackgroundImage, also die MXML-Datei SkinBackgroundImage.mxml im Unterverzeichnis skin.

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. :Application name="MyDemoApp"
  3.         xmlns:fx="http://ns.adobe.com/mxml/2009"
  4.         xmlns:s="library://ns.adobe.com/flex/spark"
  5.         xmlns:mx="library://ns.adobe.com/flex/halo"
  6.         backgroundColor="0x5555555"
  7.         skinClass="skin.SkinBackgroundImage"
  8.        >
  9.  
  10.     :Button label="Demo"/>
  11.  
  12. :Application>

Alternativ wäre dies genauso auch über CSS möglich:

XML:
  1. :Style>
  2.         @namespace s "library://ns.adobe.com/flex/spark";
  3.         @namespace mx "library://ns.adobe.com/flex/halo";      
  4.    
  5.          s|Application {        
  6.             skinClass: ClassReference("skin.SkinBackgroundImage");
  7.          }
  8.     :Style>

Skin für die Applikation erstellen

Jetzt gilt es, das MXML-Skin für die Anwendung zu erstellen. Im wesentlichen besteht das Skin aus vier Teile: States, Metadaten, Inhalt und der contentGroup.

In den states werden die Zustände definiert, die durch das Skin kontrolliert werden.

In den Metadaten wird über HostComponent festgelegt wird, für welche Komponente dieses Skin gültig ist. In unserem Beispiel wird das Skin für Applikationen bereitgestellt.

Der eigentliche Inhalt, der zu sehen ist, wird über BitmapImage als Bild generiert. Durch die Einstellung repeat beim resizeMode wird das Bild gekachelt. Prinzipiell könnte an dieser Stelle nach Belieben eigener Code stehen, z.B. könnte man auch Grafiken zeichnen (siehe z.B Füllungen in FXG).

Die Group contentGroup ist der Container für alle Inhalte, die im MXML-Code einer Spark-Applikation hinzugefügt werden. Es stellt quasi die Wurzel aller sichtbaren Elemente dar und muss deshalb für ein Applikations-Skin vorhanden sein. Damit Inhaltselemente (wie z.B. der Button) nicht direkt am Rand platziert werden, wird ringsum ein Abstand von 25 Pixeln definiert. Dadurch entsteht auch der graue Rand, dort ist die Hintergrundfarbe der Applikation zu sehen.

XML:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. :Skin name="CustomApplicationSkin"
  3.     xmlns="http://ns.adobe.com/mxml/2009"
  4.     xmlns:s="library://ns.adobe.com/flex/spark"
  5.     >
  6.    
  7.     :states>
  8.         :State name="normal" />
  9.     :states>
  10.  
  11.     >
  12.         [HostComponent("spark.components.Application")]
  13.     >
  14.    
  15.     :BitmapImage source="@Embed('bgpattern.gif')"
  16.             resizeMode="repeat"
  17.             left="10" right="10" top="10" bottom="10" />
  18.  
  19.     :Group id="contentGroup"
  20.             left="25"
  21.             right="25"
  22.             top="25"
  23.             bottom="25" />
  24.  
  25. :Skin>

Download: Flexprojekt (.zip)