AS3 - DataGrid中的右对齐无法按预期工作

时间:2013-01-05 22:38:56

标签: actionscript-3 datagrid alignment right-align

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

我设法通过自定义类扩展CellRenderer并将DataGrid的{​​{1}}属性设置为类来对齐它,如this article中所述。但是,这并不完全符合我的要求。它确实将文本与右侧对齐,但如果列太小而不适合所有文本,它仍然只显示它的最左侧部分。

有人知道如何让它显示文本的最右边部分吗?

您知道,这是在FlashDevelop中的纯AS3 AIR应用程序中,我的cellRenderer类与我上面链接的文章(即CellRenderer)中的类相同。 / p>

1 个答案:

答案 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只是为了让文字看起来更好而不是触及列的边框,我做了一些定位。

很抱歉这么长的帖子虽然解决方案很简单,但我决定深入解释。基本上我只是提出了上面的课程,它起作用了。