使用FB4,我想改变打开的火花DropDownList的高度。默认情况下,它在滚动前最多显示6个项目。我的下拉列表包含7个项目,因此我想更改打开的下拉列表的高度以适应所有7项而不滚动。作为一种解决方法,我已经改变了项目的字体大小,使它们更小,所有7都适合,但较小的字体看起来不太好。有没有办法改变这个高度?我对Flash很新,所以如果它是一个复杂的解决方案,请详细说明: - )。
答案 0 :(得分:17)
如果使用verticalLayout的属性requestedRowCount,是不是更容易?
<s:DropDownList dataProvider="{myDataProvider}">
<s:layout>
<s:VerticalLayout requestedRowCount="10"/>
</s:layout>
</s:DropDownList>
答案 1 :(得分:16)
问题是,在Flex 4中,DropDownListSkin为您可能正在使用的默认皮肤定义了maxHeight="134"
。如果对象超出该高度,则强制滚动条出现。您需要做的就是将DropDownListSkin代码复制/粘贴到自定义皮肤中,然后通过CSS将其应用于DropDownList:
<强> VariableHeightDropDownListSkin 强>
<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
alpha.disabled=".5">
<!-- host component -->
<fx:Metadata>
<![CDATA[
/**
* @copy spark.skins.spark.ApplicationSkin#hostComponent
*/
[HostComponent("spark.components.DropDownList")]
]]>
</fx:Metadata>
<s:states>
<s:State name="normal" />
<s:State name="open" />
<s:State name="disabled" />
</s:states>
<s:PopUpAnchor id="popUp" displayPopUp.normal="false" displayPopUp.open="true" includeIn="open"
left="0" right="0" top="0" bottom="0" itemDestructionPolicy="auto"
popUpPosition="below" popUpWidthMatchesAnchorWidth="true">
<!-- removed maxHeight! -->
<s:Group id="dropDown" minHeight="22">
<!-- border/fill -->
<s:Rect left="0" right="0" top="0" bottom="0">
<s:stroke>
<s:SolidColorStroke color="0x5380D0" />
</s:stroke>
<s:fill>
<s:SolidColor color="0xFFFFFF" />
</s:fill>
</s:Rect>
<s:Scroller left="0" top="0" right="0" bottom="0" focusEnabled="false" minViewportInset="1">
<s:DataGroup id="dataGroup" itemRenderer="spark.skins.spark.DefaultItemRenderer">
<s:layout>
<s:VerticalLayout gap="0" horizontalAlign="contentJustify"/>
</s:layout>
</s:DataGroup>
</s:Scroller>
<s:filters>
<s:DropShadowFilter blurX="20" blurY="20" distance="7" angle="90" alpha="0.45" color="0x6087CC" />
</s:filters>
</s:Group>
</s:PopUpAnchor>
<s:Button id="openButton" left="0" right="0" top="0" bottom="0" focusEnabled="false"
skinClass="spark.skins.spark.DropDownListButtonSkin" />
<s:Label id="labelDisplay" verticalAlign="middle" lineBreak="explicit"
mouseEnabled="false" mouseChildren="false"
left="7" right="30" top="2" bottom="2" width="75" verticalCenter="1" />
</s:Skin>
示例应用
<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Style>
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace s "library://ns.adobe.com/flex/spark";
s|DropDownList
{
skinClass: ClassReference("VariableHeightDropDownListSkin");
}
</fx:Style>
<s:DropDownList labelField="name" horizontalCenter="0" verticalCenter="0">
<s:layout>
<s:VerticalLayout requestedRowCount="7"/>
</s:layout>
<s:dataProvider>
<mx:ArrayCollection>
<fx:Object name="one"/>
<fx:Object name="two"/>
<fx:Object name="three"/>
<fx:Object name="four"/>
<fx:Object name="five"/>
<fx:Object name="six"/>
<fx:Object name="seven"/>
</mx:ArrayCollection>
</s:dataProvider>
</s:DropDownList>
</s:Application>
如果有帮助,请告诉我 兰斯
答案 2 :(得分:9)
viatropos回答会起作用,但是你应该尽量避免覆盖整个皮肤。
在这种情况下,您会注意到在他删除了maxHeight属性的组中的viatropos的VariableHeightDropDownListSkin代码中,还指定了一个“id”。
现在看看DropDownList的文档,你会在SkinParts部分注意到有一个“dropDown”皮肤部分。这实际上是DropDownList的一个属性。
所以不要覆盖皮肤,你可以简单地使用actionscript(我在这里使用UIComponent.DEFAULT_MAX_HEIGHT,但你可以使用你想要的任何一个):
(MyDropDownList.dropDown as UIComponent).maxHeight = UIComponent.DEFAULT_MAX_HEIGHT;
答案 3 :(得分:2)
不幸的是,这在Flex 4中比在Flex 3中要复杂得多:
你应该能够为DropDownList定义一个更高requestedRowCount
(details here)的布局,但对于&gt;您需要完成6行(Flex issue SDK-25364)。
答案 4 :(得分:1)
是rowCount,因为下拉列表是列表控件的后代。 FB4可能很相似。
myDropdown.rowCount = 7;
我通常使用更像
的东西myDropdown.rowCount = myDataProvider.lenght();