首先,我为这个问题的含糊不清道歉。在这一点上,我只是想尝试一些新的想法,以便诊断这个bug。
无论如何,我遇到的问题是使用自定义模块加载器的应用程序。该模块加载器已编译为swc,并且模块加载器正在通过其命名空间进行实例化。一切都很好。我遇到的问题特定于mx:模块中使用的按钮控件。无论出于何种原因,他们的标签被截断,例如,登录显示省略号,如Sign ...
经过相当多的愚弄,我已经能够建立以下内容:
这可能产生的副作用是将数据提供者附加到mx:ComboBox会导致组合框控件抛出绘图错误,但我并不完全确定它与上述问题有关。
我在阅读网络时找到的一个有趣的事情就是提到了fontContext及其与IFlexModuleFactory的关系。在我们的moduleloader实现中没有对fontContext的规范,所以我不完全确定这是否是问题所在。无论如何,如果有人有任何想法,那将非常感激。另一方面,如果你确切地知道我的痛苦并能给我一个答案,我可能会兴奋地弄湿自己。晚了。我累了。我需要我的Flex应用程序才能玩得很好。
提前致谢,
- 安
编辑:为了澄清我正在寻找的这个问题,我真的需要了解以下内容:
我没有与这个问题共享任何代码只是因为我必须共享整个应用程序,不幸的是,我不能这样做。再一次,我不是在寻找最终目标,是所有解决方案,只是提出了一些建议,如果有人有任何想法需要注意。
答案 0 :(得分:5)
我一直在处理这个问题,一次又一次地以各种形式处理这个问题一年,虽然我还没有弄清楚究竟是什么导致了这个问题,但显然在某个地方发生了错误的测量。 / p>
我能够做到的是解决它,主要是通过子类化按钮类型控件(在我的例子中,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(或者其他任何按钮类型控件都是罪魁祸首 - 我自己创建了大约6个左右,每种类型的控件都有一个)但是使用了{{1作为其标签,由组件用户指定:
NonTruncatingTextField
...所以最后,在你的MXML代码中,你会引用自定义组件(在这种情况下,我告诉控件永远不要截断它的标签):
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;
}
}
我同意这感觉就像一个解决方法,组件架构应该更优雅地处理所有这些,并且它可能是我们都忽略的东西,但它的工作原理;希望它能够在您寻找更明确的解决方案时解决您的问题。 (虽然就个人而言,我现在正在使用它,我已经转向了其他事情 - 时间更好地花在别处!)
祝你好运 - 让我知道它是如何运作的。答案 1 :(得分:0)
我使用了自定义按钮和链接按钮类解决方案,但仍然遇到了问题 - 但是找到了一个每次都适用于我的解决方法。
创建一个css样式,其中包含您要用于标签的字体。请务必在文本选择下拉列表中选中“嵌入此字体”。返回并将样式应用到您的按钮(或您的自定义按钮,具体取决于您对这个特定墙壁进行抨击的时间长度),瞧!
或者应该瞧...
答案 2 :(得分:0)
通过将labelPlacement设置为“bottom”,我已经成功阻止了Flex错误的按钮标签截断,如:
theButton.labelPlacement = ButtonLabelPlacement.BOTTOM;
设置标签放置似乎不会有助于防止在某些更宽的按钮尺寸中截断,但在许多情况下它对我有用。
如果您无法使用底部对齐的按钮标签(例如,当您的按钮具有水平对齐的图标时),janusz的方法似乎也有效。这是一个使用ActionScript而不是MXML的janusz .text重新分配技术的版本:
theButton.addEventListener(FlexEvent.UPDATE_COMPLETE, function (e:FlexEvent):void {
e.target.mx_internal::getTextField().text = e.target.label;
});
前面的代码要求您首先导入mx_internal和FlexEvent,如下所示: import mx.events.FlexEvent; import mx.core.mx_internal;
以下是结果......
之前(注意尽管有足够的水平空间但是截断):
后:
这种方法的唯一缺点是你丢失了省略号,但就我而言,我认为这是一个受欢迎的功能。
答案 3 :(得分:0)
我刚遇到这个问题并以这种方式解决:
<mx:LinkButton label="Some label"
updateComplete="event.target.mx_internal::getTextField().text = event.target.label"
/>;