2009-02-11 198 views
32

我创建了一个Adobe Flex应用程序,并且我有一个文本控件(mx:Text),当您需要多行不可编辑文本时(与标签相反,这是单行不可编辑的文本)。当我将浏览器窗口调整为小于文本的大小时(或者浏览器窗口已经小了),我的文本控件不会打包。在咨询我发现的this doc后,似乎只有在指定像素的绝对宽度时才会出现单词封装功能。这正是我想要避免的。我希望文本可以包裹到适合我的Flash对象的大小内,以便它始终可见......有什么方法可以通过我缺少的一些属性或可能是不同的控件来完成此操作?谢谢。如何让自定义文本控件自动换行

回答

0

您可以尝试向Event.RESIZE的父节点添加事件处理程序,并调用Text对象的validateNow()方法。 (可能在拨打invalidateSize()之前。)为什么这不会自动发生,我不知道。

5

百分比宽度和高度实际上会解析为它们的像素等效值,因此使用它们应该可以实现您要查找的包装和相对大小。例如:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%"> 
    <mx:Text width="100%" height="100%" text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." /> 
</mx:Application> 

也就是说,只要有任何形式的宽度设置,相对大小(一个明确的数字,百分比,基于约束的锚 - 例如,上,右,下,左 - 等等)应该导致文本自然地包装。这种方法不适用于您使用的布局吗?没有一些代码,很难说,但你是对的 - 包装确实需要在容器上设置宽度相关的属性。

调整大小和包装可能有点棘手,虽然取决于上下文,所以如果您发现这不起作用,请尝试发布一些代码 - 我相信我们其中一个人将能够帮助您出来。

25

我有这个相同的问题。在我的情况下,我有一个mx:Text块(应该包装),并且mx:Text对象嵌入到TWO mx:VBox容器中。

,我得到了成功地自动换行的唯一办法是做以下两项操作:

  1. 把“WIDTH =‘100%’的财产到每个VBox容器(其中MX:文本居住)。
  2. 把“WIDTH =‘100%’的财产为每一MX:文本对象(驻留在此筑巢垂直框的范围内)

非常不直观,但是这是对我工作。

我希望这可以帮助你!

乔恩Kinsting

+1

啊哈。我刚刚遇到了同样的问题,即通过同样的方法解决了这个问题 - 在三种情况下明确设置宽度 - 外框,内框和Text对象。 – user8032 2009-04-07 05:42:02

0

我认为施加垂直框宽度= “100%” 和文本宽度= “100%” 是最简单的方法。注意:如果文本是动态生成的,不要忘记做text.percentWidth = 100

0

所以Christian只是一个带有Text元素的应用程序的例子,但它太容易搞乱了布局。只需添加一个垂直框其间,装箱确实工作:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%"> 
<mx:VBox width="100%"> 
    <mx:Text width="100%" height="100%" text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." />  
</mx:VBox> 
</mx:Application> 
+0

奇怪..如果您从文本中删除高度=“100%”,它会工作... – Tom 2010-03-23 13:04:05

-4
render="invalidateSize();validateNow(); 
'component id'.mx_internal::getTextField().wordWrap=true" 

添加到您的文本组件。

4

如果你试图让文本换行到MXML组件内部工作试试这个:

<mx:Text id="testText" 
    width="{ this.width }" 
    height="100%" 
    text="Your text here" /> 

你基本上设置宽度与组件的宽度和高度设置为100%将允许它在缩小尺寸时正确包装。

-2

我可以使用只有mxml。结果很难看,但我可以做到。

<s:Group id="propDisplay" width="100%"> 
    <mx:Text id="key" left="0" text="{data.key}:"/> 
    <mx:Text left="{key.width}" maxWidth="{propDisplay.width - key.width}" 
          text="{data.value}" /> 
</s:Group> 
-1

尝试在文本字段中设置htmlText =“true”。

相关问题