actionscript 3 - AS3 - DataGrid的右对齐不像我预期的那样工作



对,所以我有一个有两列的DataGrid。在左列中,我希望文本向右对齐:更具体地说,如果该列太小而无法显示整个文本,我希望它包含最右边的内容。

我设法通过创建一个扩展CellRenderer的自定义类并将DataGridcellRenderer属性设置为该类来对齐它,如本文所述。然而,这并不完全是我想要的工作方式。它确实会将文本向右对齐,但如果列太小,无法容纳所有文本,它仍然只显示最左边的部分。

有谁知道我怎么能让它显示文本的最右边的部分吗?

就像你知道的,这是一个纯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像素只是我做的一点定位,使文本看起来更好,而不是触摸列的边界。

很抱歉,虽然解决方案很简单,但我决定深入解释一下。基本上,我只是想到了上面的类,它工作。

最新更新