Вы можете работать с оверлеем, который будет отображаться только в том случае, если у поставщика данных нет элементов, например:
<s:List dataProvider="{dp}" left="0" right="0" top="0" bottom="0" />
<s:Group id="emptyMsgBox" left="0" right="0" top="0" bottom="0" alpha=".7"
visible="{!dp.length}" includeInLayout="{!dp.length}">
<s:Rect left="0" right="0" top="0" bottom="0">
<s:fill>
<s:SolidColor color="0x000000" />
</s:fill>
</s:Rect>
<s:Label text="no items in list" color="0xffffff"
verticalCenter="0" horizontalCenter="0" />
</s:Group>
Вы также можете использовать состояния вместо связи между «visible», «includeInLayout»и 'dp.length'
Редактировать: если вы хотите использовать это поведение во всех ваших компонентах List, вы можете создать собственный скин для List, например:
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Metadata>
[HostComponent("spark.components.List")]
</fx:Metadata>
<s:states>
<s:State name="normal" />
<s:State name="disabled" />
</s:states>
<s:Rect left="0" right="0" top="0" bottom="0" id="border">
<s:stroke>
<s:SolidColorStroke id="borderStroke" weight="1"/>
</s:stroke>
</s:Rect>
<s:Rect id="background" left="1" right="1" top="1" bottom="1" >
<s:fill>
<s:SolidColor id="bgFill" color="0xFFFFFF" />
</s:fill>
</s:Rect>
<s:Scroller id="scroller" left="0" top="0" right="0" bottom="0"
minViewportInset="1" hasFocusableChildren="false">
<s:DataGroup id="dataGroup"
itemRenderer="spark.skins.spark.DefaultItemRenderer">
<s:layout>
<s:VerticalLayout gap="0" horizontalAlign="contentJustify"
requestedMinRowCount="5" />
</s:layout>
</s:DataGroup>
</s:Scroller>
<s:Group id="emptyMsgBox" left="0" right="0" top="0" bottom="0" alpha=".7"
visible="{!dataGroup.dataProvider.length}"
includeInLayout="{!dataGroup.dataProvider.length}">
<s:Rect left="0" right="0" top="0" bottom="0">
<s:fill>
<s:SolidColor color="0x000000" />
</s:fill>
</s:Rect>
<s:Label text="no items in list" color="0xffffff"
verticalCenter="0" horizontalCenter="0" />
</s:Group>
</s:Skin>
Это урезанная версия класса скина, но подведем итог: все, что вам нужно сделать, это добавить эту группу наложения к исходному Spark ListSkin точно так же, как в предыдущем примере.Примените его ко всем компонентам List с помощью CSS:
s|List {
skinClass: ClassReference("my.custom.skin.ListSkin");
}