Flex自定义按钮组件

时间:2009-08-17 23:35:01

标签: flex actionscript-3 mxml

我希望我的自定义按钮看起来像下面的按钮示例。 更具体地说,我希望按钮的宽度由标签中最大单词的宽度确定(即在我的例子中为“细长”的宽度)。标签必须包裹,而不是截断。 我只想在图标的上边缘和我的按钮的上边缘之间只有一个像素。 到目前为止,我已经尝试过很多东西,但无济于事。我已将horizo​​ntalGap和verticalGap减小为零并填充为零。但仍然没有。请帮忙。

这就是我现在所拥有的:

<mx:Button  top="0" cornerRadius="2" paddingLeft="0" paddingRight="0" leading="0" letterSpacing="0" paddingTop="0" paddingBottom="0" verticalGap="0" horizontalGap="0" textAlign="center" labelPlacement="bottom" icon="{MyIcon}" height="60" width="75" label="Elongated Label" fontSize="10" />

alt text

2 个答案:

答案 0 :(得分:1)

这一点都不简单。

您需要创建自己的按钮

public class Mybutton extends Button {...}

覆盖createChildren并将用于标签的IUITextField的自动换行设置为true。

覆盖度量并使用您自己的行指标来确定按钮的宽度。如果你得到正确的尺寸,那么按钮就会正常摆放。

答案 1 :(得分:0)

此刻我面前没有开发环境,但这些内容应该有效:

  1. 将Label的truncateToFit属性设置为false(或者使用将wordWrap设置为true的TextField - 我认为这应该尽可能地将单词保持在一起)。
  2. 我还没有必要使用上述任何一种,希望你还没有尝试过它们,因为它可以很容易地解决你的部分问题。没有任何代码,我不确定为什么填充不起作用,但也许它与截断这个词有关。

    作为替代方案,为什么不使用Button,嵌入或指定图标的来源,并通过指定对象的labelPlacement属性来决定放置文本的位置?

    编辑:由于Button中没有关于wordWrap的属性,因为他们建议在Adobe Flex论坛中根据没有自动功能的内容进行大小调整的问题,你必须找到最长的单词并调整按钮的宽度(即:在creationComplete事件中)。尝试找到字体与像素的比例是我最好的选择(或者您可以使用Monospace字体,其中所有字符都被赋予相同的空间,从而简化了估算):

    creationComplete="event.target.width=returnMyWidth();"
    

    对于填充,它可能与您设置的自定义宽度有关,或者可能是通过包含自动嵌入图像设置填充 - 我不是很确定,所以如果有人会很好可以根据这方面的经验提供评论。