当前位置:  开发笔记 > 前端 > 正文

Flex截断按钮标签

如何解决《Flex截断按钮标签》经验,为你挑选了1个好方法。

首先,我为这个问题的含糊不清道歉.在这一点上,我只是想尝试一些新的想法,以便诊断这个bug.

无论如何,我遇到的问题是使用自定义模块加载器的应用程序.该模块加载器已编译为swc,并且模块加载器正在通过其命名空间进行实例化.一切都很好.我遇到的问题特定于mx:模块中使用的按钮控件.无论出于何种原因,他们的标签被截断,例如,登录显示省略号,如Sign ...

经过相当多的愚弄,我已经能够建立以下内容:

    这个问题似乎只发生在模块中.如果在主mxml中使用了按钮控件,则标签不会被截断.

    标签被截断的按钮控件没有指定宽度(将其宽度设置为100%或特定像素宽度不能解决问题)

    按钮控件使用默认填充(通过向左和向右设置为5来填充填充或任何其他值也无关紧要).

    我们没有使用任何嵌入字体,所以我也认为这是一种可能性.

    mx:CheckBox和mx:LinkBut​​ton同样受到这个问题的影响,虽然mx:CheckBox似乎也不想显示它的复选框,它只显示截断的标签.

这样做的潜在副作用是将数据提供者附加到mx:ComboBox会导致组合框控件抛出绘图错误,但我并不完全确定它与上述问题有关.

我在尝试使用网络获得答案时发现的一个有趣的事情是提到了fontContext及其与IFlexModuleFactory的关系.在我们的moduleloader实现中没有对fontContext的规范,所以我不完全确定这是否是问题所在.无论如何,如果有人有任何想法,那将非常感激.另一方面,如果你确切地知道我的痛苦并能给我一个答案,我可能会兴奋地弄湿自己.晚了.我累了.我需要我的Flex应用程序才能玩得很好.

提前致谢,

--Anne

编辑: 为了澄清我正在寻找的这个问题,我真的只需要知道以下内容:

    这个问题可能是由命名空间冲突引起的吗?

    如果没有实现CSS,还有什么可能覆盖标签的默认行为?

    有没有人在使用moduleloader的自定义实现时遇到继承丢失的问题?

    有没有人使用或不使用moduleloader遇到此问题或类似问题?

我没有与这个问题共享任何代码只是因为我必须共享整个应用程序,不幸的是,我不能这样做.再一次,我不是在寻找最终目标,是所有解决方案,只是提出了一些建议,如果有人有任何想法需要注意.



1> Christian Nu..:

我一直在处理这个问题,一次又一次地以各种形式处理这个问题一年,虽然我还没有弄清楚究竟是什么导致了这个问题,但显然在某个地方发生了错误的测量.

但是,我能够解决这个问题,主要是通过子类化按钮类型控件(在我的例子中,按钮,LinkBut​​ton,PopUpButton等等)并为其截断ToToFit的UITextField扩展分配它们的textField成员实例. element在所有情况下都返回false:

public class NonTruncatingUITextField extends UITextField
{
    public function NonTruncatingUITextField ()
    {
        super();
    }

    override public function truncateToFit(s:String = null):Boolean
    {
        return false;
    }
}

自定义组件只是扩展Button(或者其他任何按钮类型控件都是罪魁祸首 - 我自己创建了大约6个左右,每种类型的控件都有一个),但是使用a NonTruncatingTextField作为其标签,在指定的位置由组件用户:

public class NonTruncatingButton extends Button
{
    private var _truncateLabel:Boolean;

    public function NonTruncatingButton()
    {
        super();

        this._truncateLabel = true;
    }

    override protected function createChildren():void
    {
        if (!textField)
        {
            if (!_truncateLabel)
                textField = new NonTruncatingUITextField();
            else
                textField = new UITextField();

            textField.styleName = this;

            addChild(DisplayObject(textField));
        }

        super.createChildren();
    }

    [Inspectable]
    public function get truncateLabel():Boolean
    {
        return this._truncateLabel;
    }

    public function set truncateLabel(value:Boolean):void
    {
        this._truncateLabel = value;    
    }   
}

...所以最后,在你的MXML代码中,你会引用自定义组件(在这种情况下,我告诉控件永远不要截断它的标签):


我同意这感觉就像一个解决方法,组件架构应该更优雅地处理所有这些,并且它可能是我们都忽略的东西,但它的工作原理; 希望它能够在您寻找更明确的解决方案时解决您的问题.(虽然就个人而言,我现在正在使用它,我已经转向其他事情 - 时间更好地花在别处!)

祝你好运 - 让我知道它是如何运作的.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有