对,所以我有一个有两列的DataGrid
。在左列中,我希望文本向右对齐:更具体地说,如果该列太小而无法显示整个文本,我希望它包含最右边的内容。
我设法通过创建一个扩展CellRenderer
的自定义类并将DataGrid
的cellRenderer
属性设置为该类来对齐它,如本文所述。然而,这并不完全是我想要的工作方式。它确实会将文本向右对齐,但如果列太小,无法容纳所有文本,它仍然只显示最左边的部分。
有谁知道我怎么能让它显示文本的最右边的部分吗?
就像你知道的,这是一个纯AS3 AIR应用程序在FlashDevelop中,我的CellRenderer
类是相同的一个在我上面链接到的文章(即RightAlignCell
)。
这是我的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;
}
}
}
textField.x
减去5像素只是我做的一点定位,使文本看起来更好,而不是触摸列的边界。
很抱歉,虽然解决方案很简单,但我决定深入解释一下。基本上,我只是想到了上面的类,它工作。