gpt4 book ai didi

apache-flex - Flex 截断按钮标签

转载 作者:行者123 更新时间:2023-12-04 02:35:44 26 4
gpt4 key购买 nike

首先,对于这个问题中的任何含糊之处,我深表歉意。在这一点上,我只是想获得一些新的想法来尝试诊断这个错误。

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

经过相当多的鬼混之后,我已经能够建立以下内容:

  1. 这个问题似乎只发生在模块中。如果在主 mxml 中使用按钮控件,标签不会被截断。
  2. 标签被截断的按钮控件未指定宽度(将其宽度设置为 100% 或特定像素宽度无法解决问题)
  3. 按钮控件使用默认填充(通过将左右设置为 5 或任何其他值来扰乱填充也无济于事)。
  4. 我们没有使用任何嵌入式字体,所以我也排除了这种可能性。
  5. mx:CheckBox 和 mx:LinkBut​​ton 同样受到此问题的影响,尽管 mx:CheckBox 似乎也不想显示其复选框,它只是显示被截断的标签。

这样做的一个潜在副作用是,将数据提供程序附加到 mx:ComboBox 会导致组合框控件引发绘图错误,但我不完全确定它是否与上述问题有关。

我在网上寻找答案时发现的一件有趣的事情是提到了 fontContext 及其与 IFlexModuleFactory 的关系。在我们的 moduleloader 实现中没有 fontContext 规范,所以我不完全确定这是否是问题所在。无论如何,如果有人有任何想法,我们将不胜感激。另一方面,如果您确切地知道是什么困扰着我并且可以为我提供答案,我可能会兴奋得浑身湿透。晚了。我累了。我需要我的 Flex 应用才能发挥出色。

提前致谢

--安妮

编辑:为了阐明我在寻找这个问题的原因,我真的只需要知道以下内容:

  1. 这个问题可能是由命名空间冲突引起的吗?
  2. 如果没有实现 CSS,还有什么可能会覆盖标签的默认行为?
  3. 有没有人在使用模块加载器的自定义实现时遇到继承丢失的问题?
  4. 有没有人在使用或不使用 moduleloader 时遇到过这个问题或类似问题?

我不会分享这个问题的任何代码,因为我必须分享整个应用程序,不幸的是,我不能这样做。同样,我不是在寻找最终结果,而是所有解决方案,只是如果有人有任何想法,就需要注意一些事情的建议。

最佳答案

一年来,我自己一直在以各种形式断断续续地处理这个问题,虽然我还没有弄清楚是什么原因造成的,但很明显在这条线上的某个地方发生了错误测量。

不过,我能做的是解决它,基本上是通过子类化按钮类型控件(在我的例子中是 Button、LinkBut​​ton、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(或者任何其他按钮类型的控件是罪魁祸首——我自己创建了六个左右,每个控件类型一个),但使用了 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 代码中,您将引用自定义组件(在这种情况下,我告诉控件永远不要截断其标签):

<components:NonTruncatingButton id="btn" label="Click This" truncateLabel="false" />

我同意这感觉像是一种变通方法,组件架构应该更优雅地处理所有这些,这可能是我们都忽略的事情,但它确实有效;希望它能在您寻找更明确的解决方案时解决您的问题。 (尽管就我个人而言,我按原样使用它,并且我已经转移到其他事情上了——最好把时间花在其他地方!)

祝你好运 - 让我知道结果如何。

关于apache-flex - Flex 截断按钮标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/518917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com