是的,所以我有一个DataGrid
有两列。在左栏中,我希望文本与右侧对齐:更具体地说,如果列太小而无法显示整个文本,我希望它包含最右边的内容。
我设法通过自定义类扩展CellRenderer
并将DataGrid
的{{1}}属性设置为类来对齐它,如this article中所述。但是,这并不完全符合我的要求。它确实将文本与右侧对齐,但如果列太小而不适合所有文本,它仍然只显示它的最左侧部分。
有人知道如何让它显示文本的最右边部分吗?
您知道,这是在FlashDevelop中的纯AS3 AIR应用程序中,我的cellRenderer
类与我上面链接的文章(即CellRenderer
)中的类相同。 / p>
答案 0 :(得分:2)
以下是我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
只是为了让文字看起来更好而不是触及列的边框,我做了一些定位。
很抱歉这么长的帖子虽然解决方案很简单,但我决定深入解释。基本上我只是提出了上面的课程,它起作用了。