Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Spark列表-AlternatingItemColor-扩展到底部_Apache Flex_Flex Spark - Fatal编程技术网

Apache flex Spark列表-AlternatingItemColor-扩展到底部

Apache flex Spark列表-AlternatingItemColor-扩展到底部,apache-flex,flex-spark,Apache Flex,Flex Spark,在古老的mx世界中,AlternatingItemColor一直延伸到列表的高度。在spark列表中,它在数据结束的地方停止。有人知道是否有一种简单的方法可以使Spark列表的行为类似于mx列表吗?见下图。列表下方有空白,mx列表中不会出现这种情况 难度取决于您的解决方案必须具有多大的灵活性,但总的来说,我认为您最好的选择是为此列表创建自定义外观 创建自定义蒙皮 您可以从复制Spark List蒙皮()并对其进行一些小修改开始: <!-- AlternatingColorListSkin.

在古老的mx世界中,AlternatingItemColor一直延伸到列表的高度。在spark列表中,它在数据结束的地方停止。有人知道是否有一种简单的方法可以使Spark列表的行为类似于mx列表吗?见下图。列表下方有空白,mx列表中不会出现这种情况


难度取决于您的解决方案必须具有多大的灵活性,但总的来说,我认为您最好的选择是为此列表创建自定义外观

创建自定义蒙皮 您可以从复制Spark List蒙皮()并对其进行一些小修改开始:

<!-- AlternatingColorListSkin.mxml -->
<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 id="background" left="0" right="0" top="0" bottom="0">
        <s:fill>
            <s:SolidColor id="bgFill" color="0xEEEEEE"/>
        </s:fill>
        <s:stroke>
            <s:SolidColorStroke id="borderStroke" weight="1"/>
        </s:stroke>
    </s:Rect>

    <s:Group id="oddRowGroup" left="1" right="1" top="1" bottom="1" clipAndEnableScrolling="true"/>

    <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 id="dataLayout" gap="0" horizontalAlign="contentJustify" requestedMinRowCount="5"/>
            </s:layout>
        </s:DataGroup>
    </s:Scroller>

</s:Skin>
这里发生了什么事?
updateDisplayList
(每次调整列表大小时都会调用该列表)中,我们检查高度是否已更改。如果有,我们刷新奇数行背景

我们通过删除为上一高度绘制的所有背景来实现此目的。
我们从数据组的布局中获得
行高
,并计算所需背景的总数。然后我们根据这些数字创建一些
Rect
s,并将它们添加到
oddRowGroup

局限性
目前的解决方案有一些局限性。例如,交替颜色是硬编码的(通过使用
getStyle()
)获得正确的颜色可以很容易地修复);它假定不会覆盖默认布局(即
垂直布局
);它假定
variableRowHeight
处于关闭状态;也许还有更多。但我认为这是一个很好的起点。

非常感谢您的详细回答,非常感谢。我希望会有一个快速的标志或一些我们错过了,但会尝试一下。
private var previousHeight:Number = NaN;

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
    super.updateDisplayList(unscaledWidth, unscaledHeight);
    if (previousHeight != unscaledHeight) refreshBackground(unscaledHeight);
    previousHeight = unscaledHeight;
}

private function refreshBackground(height:Number):void {
    var rowHeight:Number = dataLayout.rowHeight;
    var maxRows:int = height / rowHeight / 2;
    oddRowGroup.removeAllElements();

    for (var i:int = 0; i < maxRows; i++) {
        var row:FilledElement = new Rect();
        row.left = row.right = 0;
        row.height = rowHeight;
        row.top = (i * 2 + 1) * rowHeight;
        row.fill = new SolidColor(0xdfdfdf);
        oddRowGroup.addElement(row);
    }
}