关于 dateField,有 TextInput 和 Icon。我希望图标出现在 TextInput 的左侧,而不是像默认状态那样出现在右侧。
有人可以给我一个关于这个的提示吗?
关于 dateField,有 TextInput 和 Icon。我希望图标出现在 TextInput 的左侧,而不是像默认状态那样出现在右侧。
有人可以给我一个关于这个的提示吗?
由于 DateField 仍然是 Halo 组件,因此您需要对其进行扩展才能更改其子级。您需要创建一个新组件,扩展 DateField,然后覆盖 createChildren 和 updateDisplayList 函数。检查 DateField 如何创建它的孩子并相应地更改它们的位置。updateDisplayList 函数用于组件调整大小时,以便您可以正确调整子项的大小。
看这里(见源代码)。有一个自动建议组件,但原理是一样的。或者这应该足够了:
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;
}
}
这就是我所做的 - J_A_X 描述的相同解决方案,但使用代码,因为如果您是 ActionScript 的新手,我认为 Adobe 设置位置的方式有点令人困惑。我喜欢 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);
}