1

关于 dateField,有 TextInput 和 Icon。我希望图标出现在 TextInput 的左侧,而不是像默认状态那样出现在右侧。

有人可以给我一个关于这个的提示吗?

4

3 回答 3

2

由于 DateField 仍然是 Halo 组件,因此您需要对其进行扩展才能更改其子级。您需要创建一个新组件,扩展 DateField,然后覆盖 createChildren 和 updateDisplayList 函数。检查 DateField 如何创建它的孩子并相应地更改它们的位置。updateDisplayList 函数用于组件调整大小时,以便您可以正确调整子项的大小。

于 2011-03-31T20:46:57.593 回答
1

这里(见源代码)。有一个自动建议组件,但原理是一样的。或者这应该足够了:

public class myDateField extends DateField
{
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth,unscaledHeight);
        this.textInput.x=this.getChildAt(1).width;
        this.getChildAt(1).x = 0;
    }       
}
于 2011-06-09T14:08:14.283 回答
0

这就是我所做的 - J_A_X 描述的相同解决方案,但使用代码,因为如果您是 ActionScript 的新手,我认为 Adob​​e 设置位置的方式有点令人困惑。我喜欢 ChRapO 的方法,但我选择尝试与 MX DateField 组件设置这些元素位置的方式保持一致。

我的扩展 DateField 类:

package com.escalationpoint.tagger.view.component
{
import mx.controls.DateField;
import mx.core.mx_internal;

use namespace mx_internal;


public class DateField extends mx.controls.DateField
{
    public function DateField()
    {
        super();
    }

    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        // Unfortunate that we can't call super.super.updateDisplayList
        // since we're redoing work done in super.updateDisplayList.  Oh, well...
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        var w:Number = unscaledWidth;
        var h:Number = unscaledHeight;

        var arrowWidth:Number = downArrowButton.getExplicitOrMeasuredWidth();
        var arrowHeight:Number = downArrowButton.getExplicitOrMeasuredHeight();

        textInput.setActualSize(w - arrowWidth - 2, h);
        textInput.move(arrowWidth + 4, 0);

        downArrowButton.setActualSize(arrowWidth, arrowHeight);
        downArrowButton.move(0, Math.round((h - arrowHeight) / 2));
    }
    }
}

对比原始 DateField 组件中的 updateDisplayList 方法:

override protected function updateDisplayList(unscaledWidth:Number,
                                              unscaledHeight:Number):void
{
    super.updateDisplayList(unscaledWidth, unscaledHeight);

    var w:Number = unscaledWidth;
    var h:Number = unscaledHeight;

    var arrowWidth:Number = downArrowButton.getExplicitOrMeasuredWidth();
    var arrowHeight:Number = downArrowButton.getExplicitOrMeasuredHeight();

    downArrowButton.setActualSize(arrowWidth, arrowHeight);
    downArrowButton.move(w - arrowWidth, Math.round((h - arrowHeight) / 2));

    textInput.setActualSize(w - arrowWidth - 2, h);
}
于 2011-12-30T20:06:59.673 回答