这是我的原始代码CellRenderer
:
package
{
import fl.controls.listClasses.CellRenderer;
import fl.controls.listClasses.ICellRenderer;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
public class RightAlignCell extends CellRenderer implements ICellRenderer
{
private var tf:TextFormat;
public function RightAlignCell()
{
tf = new TextFormat();
tf.align = TextFormatAlign.RIGHT;
}
override protected function drawLayout():void
{
textField.setTextFormat(tf);
super.drawLayout();
}
}
}
但是,更改 的值textField.x
没有效果。我认为这是因为我super.drawLayout()
在覆盖版本的末尾调用,这显然将值更改回默认值。如果我一开始就调用它,改变x
工作(我在这里使用 -50 作为一个明显的例子):
override protected function drawLayout():void
{
super.drawLayout();
textField.setTextFormat(tf);
textField.x = -50;
}
但是,如果我尝试将值设置为this.width - textField.width
,正如 Gio 建议的那样,它应该给出所需的结果,它只会增加x
5 个像素。我发现问题又是super.drawLayout()
. 似乎它正在调整textField
' 的宽度以适合列内,这就是我的计算不起作用的原因。我试图删除它的功能,但这是一团糟,因为它处理了列正确显示所需的大量代码。因此,我想使用以下属性textField
自动调整大小到适当的宽度,即使在调整大小时也是如此:super.drawLayout()
autoSize
override protected function drawLayout():void
{
super.drawLayout();
textField.setTextFormat(tf);
textField.autoSize = TextFieldAutoSize.LEFT;
textField.x = this.width - textField.width;
}
现在它工作了,虽然有一些障碍。这些都是最小的,并且通过将定义文本格式和自动调整大小的行移动到构造函数来修复CellRenderer
(我意识到我应该首先完成)。最后,我的最后一个功能类是这样的:
package
{
import fl.controls.listClasses.CellRenderer;
import fl.controls.listClasses.ICellRenderer;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import flash.text.TextFieldAutoSize;
public class RightAlignCell extends CellRenderer implements ICellRenderer
{
private var tf:TextFormat;
public function RightAlignCell()
{
tf = new TextFormat();
tf.align = TextFormatAlign.RIGHT;
textField.setTextFormat(tf);
textField.autoSize = TextFieldAutoSize.LEFT;
}
override protected function drawLayout():void
{
super.drawLayout();
textField.x = this.width - textField.width - 5;
}
}
}
减去 5 个像素textField.x
只是为了使文本看起来更好,而不是触摸列的边框。
很抱歉这么长的帖子,虽然解决方案很简单,但我决定深入解释一下。基本上我只是想出了上面的课程,它奏效了。