Apache flex 如何在Flex中以编程方式滚动到mx:TextArea的底部?
考虑以下mx:TextAreaApache flex 如何在Flex中以编程方式滚动到mx:TextArea的底部?,apache-flex,Apache Flex,考虑以下mx:TextArea <mx:TextArea id="textArea"/> 。。如何确保textarea向下滚动到底部,以便用户可以看到添加的最后一行?我不知道如何使用Halo textarea显式执行此操作,但Spark textarea有一个scrollToRange方法,在这种情况下可能对您有用。如果不想使用Spark组件,另一种方法是使用Halo列表组件,并将每一新行作为新项添加到列表的数据提供程序中。每次添加到数据提供程序后,可以调用列表上的scrollTo
<mx:TextArea id="textArea"/>
。。如何确保textarea向下滚动到底部,以便用户可以看到添加的最后一行?我不知道如何使用Halo textarea显式执行此操作,但Spark textarea有一个scrollToRange方法,在这种情况下可能对您有用。如果不想使用Spark组件,另一种方法是使用Halo列表组件,并将每一新行作为新项添加到列表的数据提供程序中。每次添加到数据提供程序后,可以调用列表上的scrollToIndex以确保新项可见。希望有帮助 添加文本集后
callLater(scrollToEnd);
....
function scrollToEnd():void {
textArea.verticalScrollPosition = int.MAX_VALUE;
}
它应该滚动到最后
甚至比callLater更好的方法是使用
invalidateProperties
/commitProperties
将光标放在文本的末尾。还应滚动以显示光标:
textArea.selectionBeginIndex = textArea.text.length;
textArea.selectionEndIndex = textArea.text.length;
该代码在Flash Builder 4.5.1下适用于我:
chatroom.scrollToRange(int.MAX_VALUE, int.MAX_VALUE);
山姆:我试过了,但不幸的是,它只会向下滚动到最后一行的第二行。此方法有时可能有效,但并非总是有效。您可以在添加新文本后,但在设置verticalScrollPosition以便TextArea知道新文本的大小之前,尝试调用validateNow()。@joshtynjala,您应该避免调用
validateNow()
,因为这可能会导致性能问题。我将代码更新为使用callLater
哪个更好invalidateProperties
/commitProperties
会更好。不幸的是,这只能用于滚动到底部,而不能滚动到任何像素或百分比偏移,不过技巧不错:)
chatroom.scrollToRange(int.MAX_VALUE, int.MAX_VALUE);