2010-12-15 4 views
0

In der MX TabBar-Komponente erlaubte uns die iconField-Eigenschaft, verschiedene Symbole auf jeder Registerkarte anzuzeigen. In Spark scheint es keine inhärente Möglichkeit zu geben, Symbole zur TabBar hinzuzufügen. Hat jemand ein Beispiel für die Implementierung der Icon-Unterstützung für Sparks TabBar? Gibt es eine Möglichkeit, dies zu tun, ohne die Komponente zu erweitern?Wie kann ich dem Spark TabBar-Steuerelement mehrere Symbole hinzufügen?

Vielen Dank!

Antwort

0

Sie müssen eine Skin zum Hinzufügen von Symbolen zu Spark-Komponenten erstellen; Es ist nicht so einfach (IMHO) wie die MX-Komponenten von Flex 3, jedoch viel erweiterbarer.

Hier sind ein paar Links, die Ihnen den Einstieg helfen könnten:

+0

Vielen Dank für die Links. Ich sehe immer noch keinen Weg, wie die ButtonBarButton-Skin in die TabBar-Komponente übertragen werden kann, um ein anderes Symbol für jede Registerkarte darzustellen. Das Tour de Flex-Beispiel verwendet ein fest codiertes Bild. Alles deutet darauf hin, TabBar zu erweitern, um Icon-Unterstützung hinzuzufügen. Hat jemand das getan? Ich denke immer noch an die Skinning-Architektur für Spark, aber im Moment scheint es, dass, um echte Wiederverwendbarkeit zu erreichen, benutzerdefinierte CSS-Stile implementiert werden müssen oder die Komponente selbst erweitert werden muss. Kann mich jemand sonst aufklären? – BatFlexUser

0

ich, dass ich mit einer Lösung zu kommen haben glauben, was ich Ich poste unten für die Nachwelt. Wenn jemand einen besseren Weg hat, würde ich den Vorschlag sehr schätzen.

<!-- main app: TabBar implementation --> 

<s:TabBar 
    dataProvider="{contentTabBarPrimaryDP}" 
    skinClass="skins.ContentTabBarSkin"/> 

<!-- skins.ContentTabBarSkin: ItemRenderer implementation --> 

<s:DataGroup id="dataGroup" width="100%" height="100%"> 
    <s:layout> 
     <s:HorizontalLayout/> 
    </s:layout> 

    <s:itemRenderer> 
     <fx:Component> 
      <custom:IconButtonBarButton 
       label="{data.label}" 
       icon="{data.icon}" 
       skinClass="skins.ContentTabBarButtonSkin"/> 
     </fx:Component> 
    </s:itemRenderer> 
</s:DataGroup> 

<!-- skins.ContentTabBarButtonSkin: icon implementation --> 

<s:HGroup  
    gap="3" 
    paddingBottom="3" 
    paddingLeft="3" 
    paddingRight="3" 
    paddingTop="3" 
    verticalAlign="middle"> 

    <!--- layer 2: icon --> 
    <s:BitmapImage id="iconDisplay" 
     left="5" 
     verticalCenter="0" />  

    <!--- layer 3: label --> 
    <s:Label id="labelDisplay" 
     textAlign="center" 
     verticalAlign="middle" 
     maxDisplayedLines="1" 
     horizontalCenter="0" verticalCenter="1" 
     left="10" 
     right="10" 
     top="2" 
     bottom="2"> 
    </s:Label> 

</s:HGroup> 

Diese Lösung verwendet ein benutzerdefiniertes DTO-Objekt für den TabBar Datenprovider, die den Beschriftungstext sowie das eingebetteten Symbolbild als eine Klasse speichert. Ich hatte auch die ButtonBarButton Komponente erweitern ein iconDisplay SkinPart, die wie folgt aussieht hinzuzufügen:

[SkinPart(required="false")] 
public var iconDisplay:BitmapImage; 

Diese Klasse hat auch Getter/Setter für das Symbol Klasse Eigenschaft und setzt das Symbol Quelle, wie zum Beispiel:

public function set icon(value:Class):void { 

    _icon = value; 

    if (iconDisplay != null) 
     iconDisplay.source = _icon; 

} 

override protected function partAdded(partName:String, instance:Object):void { 

    super.partAdded(partName, instance); 

    if (icon !== null && instance == iconDisplay) 
     iconDisplay.source = icon;  

} 
2

Hey nach einer Woche zu versuchen, mehrere Wege folgen, (Sie oben auf der Liste) fand ich einen einfacheren und effektiver Weg, Symbole zu meiner Tab-Leiste hinzufügen, oder andere andere Komponente verwendet Skinning.

Sie müssen keine benutzerdefinierte Komponente erstellen, sondern nur das Symbol übergeben und durch Daten markieren.

http://cookbooks.adobe.com/post_Tutorials_for_skinning_Spark_ButtonBar_component_w-16722.html

Als persönlich, ich war mit Content-Navigator mit meinem Tabbar/ViewStack-, ging ich auf das Symbol als Symbol statt ImageIcon. Sie können Änderungen entsprechend vornehmen.