Apache flex Flex截断按钮标签
首先,我对这个问题的含糊不清表示歉意。在这一点上,我只是想尝试一些新的想法来诊断这个bug 无论如何,我遇到的问题是一个使用自定义moduleloader的应用程序。该moduleloader已编译成swc,并且正在通过其命名空间实例化moduleloader。这一切都很好。我遇到的问题特定于模块中使用的mx:button控件。不管出于什么原因,他们的标签被截断了,所以,例如,登录显示为省略号,如Sign 经过相当一段时间的胡闹,我已经能够确定以下几点:Apache flex Flex截断按钮标签,apache-flex,Apache Flex,首先,我对这个问题的含糊不清表示歉意。在这一点上,我只是想尝试一些新的想法来诊断这个bug 无论如何,我遇到的问题是一个使用自定义moduleloader的应用程序。该moduleloader已编译成swc,并且正在通过其命名空间实例化moduleloader。这一切都很好。我遇到的问题特定于模块中使用的mx:button控件。不管出于什么原因,他们的标签被截断了,所以,例如,登录显示为省略号,如Sign 经过相当一段时间的胡闹,我已经能够确定以下几点: 这个问题似乎只发生在模块内。如果在主mx
我不会与这个问题共享任何代码,因为我必须共享整个应用程序,不幸的是,我不能这样做。再说一次,我不是在寻找最终的解决方案,只是一些建议,如果有人有任何想法的话,我需要注意。一年来,我一直在断断续续地以各种形式处理这个问题,虽然我还没有弄清楚是什么导致了它,很明显,在这条线路的某个地方发生了误判 不过,我能够解决的是,基本上是通过对按钮类型控件(在我的例子中是button、LinkButton、PopUpButton等)进行子类化,并为其textField成员分配UITextField扩展的实例,该扩展的truncateToFit元素在所有情况下都返回false:
public class NonTruncatingUITextField extends UITextField
{
public function NonTruncatingUITextField ()
{
super();
}
override public function truncateToFit(s:String = null):Boolean
{
return false;
}
}
自定义组件只是扩展了Button(或者任何其他按钮类型控件都是罪魁祸首——我自己创建了六个左右的按钮类型,每种类型的控件一个),但使用非RuncatingTextField
作为其标签,其中由组件用户指定:
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代码中,您将引用自定义组件(在本例中,我告诉控件永远不要截断其标签):
我同意这感觉像是一种变通方法,组件架构应该更优雅地处理所有这些问题,这可能是我们都忽略了的东西,但它是有效的;希望它能在你寻找更明确的解决方案时解决你的问题。(虽然就我个人而言,我正在按原样使用它,并且我已经转移到其他事情上——时间最好花在别处!)
祝你好运——让我知道它是如何工作的。我使用了自定义按钮和链接按钮类解决方案,但仍然遇到问题,但找到了一个每次都对我有效的解决方法 创建一个css样式,其中包含要用于标签的字体。确保选中文本选择下拉列表下的“嵌入此字体”。返回并将该样式应用于您的按钮(或自定义按钮,具体取决于您在墙上敲击耳朵的时间),瞧
或者应该是这样的…通过将labelPlacement设置为“底部”,我已经成功地防止了Flex错误的按钮标签截断,如下所示: 设置标签位置似乎无助于防止更大尺寸的按钮被截断,但在许多情况下,它对我来说是有效的 在不能使用底部对齐的按钮标签的情况下(例如,当按钮具有水平对齐的图标时),janusz的方法似乎也有效。以下是janusz在ActionScript而非MXML中的.text重新分配技术的一个版本:
theButton.addEventListener(FlexEvent.UPDATE_COMPLETE, function (e:FlexEvent):void {
e.target.mx_internal::getTextField().text = e.target.label;
});
前面的代码要求您首先导入mx_internal和FlexEvent,如下所示:
导入mx.events.FlexEvent;
导入mx.core.mx_internal
下面是结果
之前(注意截断,尽管有足够的水平空间):
之后:
这种方法的唯一缺点是省略号丢失,但在我的例子中,我认为这是一个受欢迎的特性。我刚刚遇到了这个问题,并通过以下方式解决了它:
<mx:LinkButton label="Some label"
updateComplete="event.target.mx_internal::getTextField().text = event.target.label"
/>;
;
您是
theButton.addEventListener(FlexEvent.UPDATE_COMPLETE, function (e:FlexEvent):void {
e.target.mx_internal::getTextField().text = e.target.label;
});
<mx:LinkButton label="Some label"
updateComplete="event.target.mx_internal::getTextField().text = event.target.label"
/>;