spark.layouts.supportClassesLayoutBase LayoutBase 类为所有 Spark 布局定义基类。The <s:LayoutBase> tag inherits all of the tag attributes of its superclass and adds the following tag attributes:

  <s:LayoutBase 
    Properties
    clipAndEnableScrolling="false"
    dropIndicator="defined by the skin class"
    horizontalScrollPosition="0"
    target="null"
    typicalLayoutElement="null"
    useVirtualLayout="false"
    verticalScrollPosition="0"
  />
  
]]>
mx.utils:OnDemandEventDispatcher LayoutBase 类为所有 Spark 布局定义基类。若要创建使用 Spark 容器的自定义布局,必须扩展 LayoutBase 或其子类之一。

至少,子类必须实现 updateDisplayList() 方法(定位 target GroupBase 的元素并调整这些元素的大小)和 measure() 方法(计算 target 的默认大小)。

子类可能会覆盖诸如 getElementBoundsAboveScrollRect()getElementBoundsBelowScrollRect() 等方法,以自定义将目标连接到滚动条时目标行为的方式。

支持虚拟化的子类必须重视 useVirtualLayout 属性,且仅应该通过使用 getVirtualElementAt()updateDisplayList() 内检索 scrollRect(getScrollRect() 的值)内的布局元素。

LayoutBase 构造函数。 构造函数。 calculateDragScrollDelta 计算在拖放动作中为指定 dropLocation 滚动的数量。拖动滚动的数量;如果不需要拖动滚动,则为 null。 dropLocationspark.layouts.supportClasses:DropLocation通过调用 calculateDropLocation() 方法先前获得的有效 DropLocation 对象。 elapsedTime拖动滚动开始后的持续时间(以毫秒为单位)。 计算在拖放动作中为指定 dropLocation 滚动的数量。由 showDropIndicator() 方法调用以计算在拖动滚动期间滚动的数量。 spark.layouts.supportClasses.DropLocationcalculateDropIndex()calculateDropIndicatorBounds()calculateDropIndex 返回在完成某个拖放动作的同时用户在指定的坐标处释放鼠标的情况下应该插入新项目的位置的索引。拖放索引 或 -1(如果在指定坐标处拖放操作不可用)。 x在本地坐标中拖放动作的 x 坐标。 y在放置目标的本地坐标中,拖放动作的 y 坐标。 返回在完成某个拖放动作的同时用户在指定的坐标处释放鼠标的情况下应该插入新项目的位置的索引。由 calculatedDropLocation() 方法调用。 calculateDropLocation()calculateDropIndicatorBounds 计算拖放指示符的边界,该指示符为用户提供关于在拖放动作结尾处将项插入的位置的可视反馈。拖放指示符的界限或 null。 dropLocationspark.layouts.supportClasses:DropLocationcalculateDropLocation() 方法先前返回的有效 DropLocation 对象。 计算拖放指示符的边界,该指示符为用户提供关于在拖放动作结尾处将项插入的位置的可视反馈。由 showDropIndicator() 方法调用。 spark.layouts.supportClasses.DropLocationcalculateDropIndex()calculateDragScrollDelta()calculateDropLocation 为指定的 dragEvent 在放置目标的数据提供程序中计算拖放位置。返回此事件的拖放位置;如果拖放操作不可用,则返回 null。 spark.layouts.supportClasses:DropLocationdragEvent由 DragManager 分派的拖放事件。 为指定的 dragEvent 在放置目标的数据提供程序中计算拖放位置。 showDropIndicator()hideDropIndicator()clearVirtualLayoutCache 如果 useVirtualLayout 为 true,则当布局目标改变时,布局目标可以使用此方法来清除已缓存布局信息。 如果 useVirtualLayouttrue,则当布局目标改变时,布局目标可以使用此方法来清除已缓存布局信息。

例如,当 DataGroup 的 dataProvideritemRenderer 属性更改时,缓存的元素大小将无效。

useVirtualLayout 属性变为 false 时,将自动调用此方法。

支持 useVirtualLayout = true 的子类必须覆盖此方法。

elementAdded 在已添加布局元素之后且在验证目标的大小和显示列表之前,由目标调用。index已添加的元素的索引。 在已添加布局元素之后且在验证目标的大小和显示列表之前,由目标调用。按元素状态缓存的布局(比如虚拟布局)可以覆盖此方法以更新其缓存。

如果目标调用此方法,则它仅保证在 updateDisplayList() 时将在指定的索引处存在一个布局元素,例如添加目标 dataProvider 项目时,虚拟布局内的 DataGroup 将调用此方法。

默认情况下,此方法不执行任何操作。

elementRemoved
elementRemoved 必须在已删除布局元素之后且在验证目标的大小和显示列表之前,由目标调用此方法。index已添加的元素的索引。 必须在已删除布局元素之后且在验证目标的大小和显示列表之前,由目标调用此方法。按元素状态缓存的布局(比如虚拟布局)可以覆盖此方法以更新其缓存。

如果目标调用此方法,则它仅保证在 updateDisplayList() 时在指定的索引处将不再存在布局元素。例如,将项目添加到 dataProvider 属性时,具有虚拟布局的 DataGroup 会调用此方法。

默认情况下,此方法不执行任何操作。

elementAdded
getElementBoundsAboveScrollRect 返回跨越 scrollRect 的顶边或在其顶边之上的第一个布局元素的界限。跨越 scrollRect 的顶边或在其顶边之上的第一个元素的界限。 scrollRect目标的 scrollRect。 返回跨越 scrollRect 的顶边或在其顶边之上的第一个布局元素的界限。

这是 getVerticalScrollPositionDelta() 方法的默认实现所用的一种简便方法。依赖于 getVerticalScrollPositionDelta() 的默认实现的子类应该覆盖此方法,以提供一个具有有效 topbottom 属性的准确边界矩形。

默认情况下,此方法会返回 width=0、height=1、顶边比 scrollRect 的顶边短且 left=0 的矩形。

子类应该覆盖此方法,以提供一个具有有效 topbottom 属性的准确边界矩形。

getElementBoundsLeftOfScrollRectgetElementBoundsRightScrollRectgetElementBoundsBelowScrollRectgetVerticalScrollPositionDelta
getElementBoundsBelowScrollRect 返回跨越 scrollRect 的底边或在其底边之下的第一个布局元素的界限。跨越 scrollRect 的底边或在其底边之下的第一个元素的界限。 scrollRect目标的 scrollRect。 返回跨越 scrollRect 的底边或在其底边之下的第一个布局元素的界限。

这是 getVerticalScrollPositionDelta() 方法的默认实现所用的一种简便方法。依赖于 getVerticalScrollPositionDelta() 的默认实现的子类应该覆盖此方法,以提供一个具有有效 topbottom 属性的准确边界矩形。

默认情况下,此方法会返回 width=0、height=1、底边比 scrollRect 的底边长且 left=0 的矩形。

getElementBoundsLeftOfScrollRectgetElementBoundsRightScrollRectgetElementBoundsAboveScrollRectgetVerticalScrollPositionDelta
getElementBoundsLeftOfScrollRect 返回跨越 scrollRect 的左边或在其左边左侧的第一个布局元素的界限。跨越 scrollRect 的左边或在其左边左侧的第一个元素的界限。 scrollRect目标的 scrollRect。 返回跨越 scrollRect 的左边或在其左边左侧的第一个布局元素的界限。

这是 getHorizontalScrollPositionDelta() 方法的默认实现所用的一种简便方法。依赖于 getHorizontalScrollPositionDelta() 的默认实现的子类应该覆盖此方法,以提供一个具有有效 leftright 属性的准确边界矩形。

默认情况下,此方法会返回 width=1、height=0、左边比 scrollRect 的左边短且 top=0 的矩形。

getElementBoundsRightOfScrollRectgetElementBoundsAboveScrollRectgetElementBoundsBelowScrollRectgetHorizontalScrollPositionDelta
getElementBoundsRightOfScrollRect 返回跨越 scrollRect 的右边或在其右边右侧的第一个布局元素的界限。跨越 scrollRect 的右边或在其右边右侧的第一个元素的界限。 scrollRect目标的 scrollRect。 返回跨越 scrollRect 的右边或在其右边右侧的第一个布局元素的界限。

这是 getHorizontalScrollPositionDelta() 方法的默认实现所用的一种简便方法。依赖于 getHorizontalScrollPositionDelta() 的默认实现的子类应该覆盖此方法,以提供一个具有有效 leftright 属性的准确边界矩形。

默认情况下,此方法会返回 width=1、height=0、右边比 scrollRect 的右边长且 top=0 的矩形。

getElementBoundsLeftOfScrollRectgetElementBoundsAboveScrollRectgetElementBoundsBelowScrollRectgetHorizontalScrollPositionDelta
getElementBounds 如果索引无效、相应的元素为 null、includeInLayout=false,或者如果此布局的 target 属性为 null,则将指定元素的布局界限返回为 Rectangle 或 null。指定元素的布局界限。 index布局元素的索引。 如果索引无效,相应的元素为 null、includeInLayout=false,或者如果此布局的 target 属性为 null,则将指定元素的布局界限返回为 Rectangle 或 null。

支持 useVirtualLayout=true 的布局子类必须覆盖此方法来计算未在视图中的元素的可能近似值。

mx.core.ILayoutElement.getLayoutBoundsX()mx.core.ILayoutElement.getLayoutBoundsY()mx.core.ILayoutElement.getLayoutBoundsWidth()mx.core.ILayoutElement.getLayoutBoundsHeight()
getHorizontalScrollPositionDelta 返回对水平滚动位置的更改以处理不同的滚动选项。对水平滚动位置的更改。 navigationUnit采用以下值:
  • END 返回滚动 delta,它将使 scrollRect 与内容区域右对齐。
  • HOME 返回滚动 delta,它将使 scrollRect 与内容区域左对齐。
  • LEFT 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的左边或在其左边左侧的第一个元素左对齐。
  • PAGE_LEFT 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的左边或在其左边左侧的第一个元素右对齐。
  • PAGE_RIGHT 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的右边或在其右边右侧的第一个元素左对齐。
  • RIGHT 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的右边或在其右边右侧的第一个元素右对齐。

该实现调用 getElementBoundsLeftOfScrollRect()getElementBoundsRightOfScrollRect() 来确定元素的界限。Layout 类通常覆盖这些方法而不是 getHorizontalScrollPositionDelta() 方法。

返回对水平滚动位置的更改以处理不同的滚动选项。下列选项是由 NavigationUnit 类定义的:ENDHOMELEFTPAGE_LEFTPAGE_RIGHTRIGHT
spark.core.NavigationUnitgetElementBoundsLeftOfScrollRectgetElementBoundsRightOfScrollRectgetHorizontalScrollPositionDelta
getNavigationDestinationIndex 确定根据 NavigationUnit、基于当前处于焦点的项目和用户输入要导航到哪个项目的委派方法。要跳到的下一个项目的索引。当布局不识别 navigationUnit 时,返回 -1。 currentIndex具有焦点的项目的当前索引。 navigationUnit确定下一步要导航到哪个项目的 NavigationUnit 常量。 arrowKeysWrapFocus如果为 true,则使用箭头键在组件内导航时,如果击中某一端则将折回。 确定根据 NavigationUnit、基于当前处于焦点的项目和用户输入要导航到哪个项目的委派方法。此方法供 ListBase 的子类使用,以处理键盘导航。ListBase 将用户输入映射到 NavigationUnit 常量。

子类可以覆盖此方法来计算基于当前索引和遇到的击键的其他值。

getScrollPositionDeltaToElement 计算所需的 verticalScrollPosition 和 horizontalScrollPosition delta,以将处于指定索引处的元素滚动到视图中。包含到 horizontalScrollPosition 和 verticalScrollPosition 的偏移的一个点(会将指定的元素滚动到视图中);或者如果不需要更改,则为 null。如果指定的元素部分可见且大于滚动矩形(这意味着它已经是唯一可见的元素),则返回 null。如果指定的索引无效,或目标为 null,则返回 null。如果指定索引处的元素为 null 或者 includeInLayout 为 false,则返回 null。 index要滚动到视图中的元素的索引。 计算所需的 verticalScrollPositionhorizontalScrollPosition delta,以将处于指定索引处的元素滚动到视图中。

此方法试图最小化对 verticalScrollPositionhorizontalScrollPosition 的更改。

如果 clipAndEnableScrollingtrue,且位于指定索引处的元素相对于目标的滚动矩形不完全可见,则返回将添加到 horizontalScrollPositionverticalScrollPosition 的 delta(将在滚动矩形的界限内完全滚动元素)。

clipAndEnableScrollingverticalScrollPositionhorizontalScrollPositionudpdateScrollRect()
getScrollRect 返回布局坐标中目标的滚动矩形的界限。布局坐标中目标的 scrollRect 的界限;如果 target 或 clipAndEnableScrolling 为 false,则为 null。 返回布局坐标中目标的滚动矩形的界限。Layout 方法不应该直接获取目标的滚动矩形。 getVerticalScrollPositionDelta 返回对垂直滚动位置的更改以处理不同的滚动选项。对垂直滚动位置的更改。 navigationUnit采用以下值:
  • DOWN 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的底边或在其底边之下的第一个元素底对齐。
  • END 返回滚动 delta,它将使 scrollRect 与内容区域底对齐。
  • HOME 返回滚动 delta,它将使 scrollRect 与内容区域顶对齐。
  • PAGE_DOWN 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的底边或在其底边之下的第一个元素顶对齐。
  • PAGE_UP
  • 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的顶边或在其顶边之上的第一个元素底对齐。
  • UP 返回滚动 delta,它将使 scrollRect 与跨越 scrollRect 的顶边或在其顶边之上的第一个元素顶对齐。

该实现调用 getElementBoundsAboveScrollRect()getElementBoundsBelowScrollRect() 来确定元素的界限。Layout 类通常覆盖这些方法而不是 getVerticalScrollPositionDelta() 方法。

返回对垂直滚动位置的更改以处理不同的滚动选项。下列选项是由 NavigationUnit 类定义的:DOWNENDHOMEPAGE_DOWNPAGE_UPUP
spark.core.NavigationUnitgetElementBoundsAboveScrollRectgetElementBoundsBelowScrollRectgetVerticalScrollPositionDelta
hideDropIndicator 隐藏由 showDropIndicator() 方法创建的先前显示的拖放指示符,将其从显示列表中删除,还将停止拖放滚动。 隐藏由 showDropIndicator() 方法创建的先前显示的拖放指示符,将其从显示列表中删除,还将停止拖放滚动。 showDropIndicator()dropIndicatormeasure 基于目标的内容测量其默认大小,并(可选)测量目标的默认最小大小。 基于目标的内容测量其默认大小,并(可选)测量目标的默认最小大小。

这是创建 LayoutBase 的子类时必须覆盖的方法之一。另一个方法是 updateDisplayList()。您不直接调用这些方法。Flex 将此方法作为布局传递的一部分进行调用。布局传递由三个阶段组成。

首先,如果目标的属性无效,则 LayoutManager 会调用目标的 commitProperties 方法。

其次,如果目标的大小无效,则 LayoutManager 会调用目标的 validateSize() 方法。除非目标的 validateSize() 已由目标的 explicitWidthexplicitHeight 属性显式指定,否则它将依次调用布局的 measure() 来计算目标的默认大小。如果默认大小改变,则 Flex 将使目标的显示列表无效。

最后,如果目标的显示列表无效,则 LayoutManager 会调用目标的 validateDisplayList。目标的 validateDisplayList 将依次调用布局的 updateDisplayList 方法来调整目标的元素的大小并定位这些元素。

实现此方法时,必须设置目标的 measuredWidthmeasuredHeight 属性以定义目标的默认大小。您可以选择设置 measuredMinWidthmeasuredMinHeight 属性来定义默认的最小大小。典型实现循环访问目标的元素并使用由 ILayoutElement 定义的方法来累积元素的首选大小和/或最小大小,然后设置目标的 measuredWidthmeasuredHeightmeasuredMinWidthmeasuredMinHeight

updateDisplayList
scrollPositionChanged verticalScrollPosition 或 horizontalScrollPosition 属性更改时调用。 verticalScrollPositionhorizontalScrollPosition 属性更改时调用。

默认实现通过调用 updateScrollRect() 更新目标的 scrollRect 属性。子类可以覆盖此方法来计算基于当前 scrollPositionscrollRect 的其他值。

updateScrollRect()
showDropIndicator 根据指定的拖放位置调整拖放指示符的大小、确定其位置并设置其父代。dropLocationspark.layouts.supportClasses:DropLocation指定要显示拖放指示符的位置。拖放位置是通过 computeDropLocation() 方法获得的。 根据指定的拖放位置调整拖放指示符的大小、确定其位置并设置其父代。使用 calculateDropLocation() 方法可获得 DropLocation 对象。

满足必要的条件时,启动/停止拖动滚动。

dropIndicatorhideDropIndicator()
updateDisplayList 调整目标的元素的大小并定位这些元素。width指定目标在目标坐标中的宽度(以像素为单位)。 height指定组件在目标坐标中的高度(以像素为单位)。 调整目标的元素的大小并定位这些元素。

这是创建 LayoutBase 的子类时必须覆盖的方法之一。另一个方法是 measure()。您不直接调用这些方法。Flex 将此方法作为布局传递的一部分进行调用。布局传递由三个阶段组成。

首先,如果目标的属性无效,则 LayoutManager 会调用目标的 commitProperties 方法。

其次,如果目标的大小无效,则 LayoutManager 会调用目标的 validateSize() 方法。除非目标的 validateSize() 已由目标的 explicitWidthexplicitHeight 属性显式指定,否则它将依次调用布局的 measure() 来计算目标的默认大小。如果默认大小改变,则 Flex 将使目标的显示列表无效。

最后,如果目标的显示列表无效,则 LayoutManager 会调用目标的 validateDisplayList。目标的 validateDisplayList 将依次调用布局的 updateDisplayList 方法来调整目标的元素的大小并定位这些元素。

典型实现循环访问目标的元素并使用由 ILayoutElement 定义的方法来定位这些元素并调整其大小。然后该布局还必须计算和设置目标的 contentWidthcontentHeight 属性来定义目标的滚动区域。

measure
updateScrollRect 在其 updateDisplayList 的结尾由目标调用,以使布局更新其 scrollRect。w目标的宽度。 h目标的高度。 在其 updateDisplayList 的结尾由目标调用,以使布局更新其 scrollRect。

如果 clipAndEnableScrollingtrue,则默认的实现会将目标的 scrollRect 的原点设置为 verticalScrollPositionhorizontalScrollPosition。它会将其大小设置为 widthheight 参数(目标的未缩放宽度和高度)。

如果 clipAndEnableScrollingfalse,则默认实现会将 scrollRect 设置为 null。

targetflash.display.DisplayObject.scrollRectupdateDisplayList()
clipAndEnableScrolling false dropIndicator 该布局在拖放操作过程中用于拖放指示符的 DisplayObject。 该布局在拖放操作过程中用于拖放指示符的 DisplayObject。通常不直接设置该属性,而是在放置目标的外观类中定义 dropIndicator 外观部件。

List 控件设置此属性以响应 DragEvent.DRAG_ENTER 事件。List 使用其 dropIndicator 外观部件的一个实例初始化此属性。List 清除此属性以响应 DragEvent.DRAG_EXIT 事件。

horizontalScrollPosition 0 target 此布局将测量其元素、调整其元素的大小并定位其元素的 GroupBase 容器。spark.components.supportClasses:GroupBasenull 此布局将测量其元素、调整其元素的大小并定位其元素的 GroupBase 容器。

子类可能会覆盖 setter 以执行目标特定操作。例如,3D 布局可能会在此处设置目标的 maintainProjectionCenter 属性。

updateDisplayListmeasure
typicalLayoutElement 当请求固定的行/列大小而未指定某个特定大小时,由布局所使用。null 当请求固定的行/列大小而未指定某个特定大小时,由布局所使用。由虚拟布局所使用,以估计尚未滚动到视图中的布局元素的大小。

此属性引用 Flex 用于定义所有容器子项的高度的组件,如以下示例所示:

      <s:Group>
        <s:layout>
          <s:VerticalLayout variableRowHeight="false"
              typicalLayoutElement="{b3}"/> 
        </s:layout>
        <s:Button id="b1" label="Button 1"/>
        <s:Button id="b2" label="Button 2"/>
        <s:Button id="b3" label="Button 3" fontSize="36"/>
        <s:Button id="b4" label="Button 4" fontSize="24"/>
      </s:Group>

如果尚未设置此属性,且目标为非空,则会缓存目标的第一个布局元素并返回该元素。

默认值为目标的第一个布局元素。

targetspark.layouts.VerticalLayout.variableRowHeightspark.layouts.HorizontalLayout.variableColumnWidth
useVirtualLayout 一个容器可包含任意数量的子项。false 一个容器可包含任意数量的子项。但是,每个子项需要一个项呈示器的实例。如果该容器有许多子项,则在向容器添加更多子项时,您可能会注意到性能降低。

不必为每个子项创建一个项呈示器,而可以配置容器使用一个虚拟布局。使用虚拟布局,容器会重用项呈示器,这样它仅会为容器的当前可见子项创建项呈示器。随着将子项移出屏幕(可能通过滚动容器),滚动到屏幕上的新子项可以重用其项呈示器。

若要配置容器使用虚拟布局,请为与容器关联的布局将 useVirtualLayout 属性设置为 true。只有布局设置为 VerticalLayout、HorizontalLayout 或 TileLayout 的 DataGroup 或 SkinnableDataContainer 才支持虚拟布局。不支持虚拟化的布局子类必须禁止更改此属性。

注意:如果将 useVirtualLayout 设置为 true,则 BasicLayout 类会引发运行时错误。

若为 true,则支持虚拟化的布局必须使用 target.getVirtualElementAt() 方法(而不是 getElementAt()),且必须仅获取在给定 getScrollRect() 的值的情况下它们预期将可见的元素。

设置为 true 时,该布局类必须能够专门根据缓存信息计算在其 updateDisplayList() 方法中重叠 scrollRect 的布局元素的索引,而不是通过获取布局元素并检查其边界来计算索引。

通常虚拟布局根据为视图中的元素计算的大小和位置,在 updateDisplayList() 方法中更新其缓存信息。

同样,在 measure() 方法中,虚拟布局应该根据 typicalLayoutElement 和其他缓存的布局信息(而不是通过测量元素)更新目标的测量大小属性。

通过循环使用先前构造但不再使用的项呈示器,容器与 useVirtualLayouttrue 的布局相互合作。如果某个项目的索引不在 getVirtualElementAt() 索引(是在容器的最近 updateDisplayList() 调用中请求的)的范围内,则认为该项目不再使用。

getScrollRecttypicalLayoutElement
verticalScrollPosition 0
DropLocation DropLocation 类包含描述拖放操作过程中已拖动数据的拖放位置的信息。Object DropLocation 类包含描述拖放操作过程中已拖动数据的拖放位置的信息。

DropLocation 是当 List 调用布局的 calculateDropLocation() 方法以响应 dragOver 时,由 LayoutBase 类创建的。

DropLocation 类供布局使用,用于执行诸如计算拖放指示符边界和拖动滚动 delta 等操作。

spark.layouts.supportClasses.LayoutBase.calculateDropLocation()spark.layouts.supportClasses.LayoutBase.calculateDropIndicatorBounds()DropLocation 构造函数。 构造函数。 dragEvent 与此位置关联的 DragEvent。null 与此位置关联的 DragEventdropIndex 与事件对应的拖放索引。-1 与事件对应的拖放索引。 dropPoint 在布局的目标的本地坐标中的事件点。null 在布局的目标的本地坐标中的事件点。