我正在尝试使Spark TextArea组件在添加文本时自动向下滚动。
首次填充TextArea时,垂直滚动条位于底部。但是,如果我附加更多文本,它就完全拒绝滚动。它在iOS平台上工作,但它不会在Android上运行!!
根据此处的示例,我尝试了以下操作:http://devgirl.org/2010/12/16/automatically-scroll-flex-mobile-textarea/
StyleableTextField(TextArea1.textDisplay).htmlText += textHTML;
StyleableTextField(TextArea1.textDisplay).scrollV++;
我还尝试了以下两行代码:
StyleableTextField(TextArea1.textDisplay).verticalScrollPosition = int.MAX_VALUE - 1;
TextArea1.scrollToRange(int.MAX_VALUE, int.MAX_VALUE);
没有工作!每当TextArea更新时,它只会向上滚动到顶部,或者根本不会移动。
我甚至尝试更改程序,以便HTML内容显示在StageWebView中。但即使在iPad上,我也无法让它滚动。我尝试调用JavaScript函数(document.getElementById('id')。focus())以及在代码中插入隐藏的锚标记,并在其上调用loadURL()。两种解决方案都不起作用。
有人可以帮我解决这个问题吗?我绝对难过。
答案 0 :(得分:0)
TextArea和TextInput在使用StageText外观时不支持滚动。您需要将TextArea设置为使用“TextAreaSkin”进行滚动才能正常工作 在使用StageText外观时,TextArea和TextInput甚至不支持软键盘的滚动/平移。
原因是当TextArea使用StageText外观时,AIR实际上使用的是OS本机文本框并将其放在displayList的顶部。这就是使用StageText外观的文本框始终显示在所有其他显示对象的顶部的原因 这可能很好,因为我们可以在我们的应用程序中使用本机显示对象,让我们可以访问操作系统提供的所有服务(自动更正,Android软键盘上的“下一步”/“完成”按钮等),但是很多你不能使用它们的情况。
所以你要么回到TextAreaSkin,因为你不再使用设备本机软键盘,或者找到解决滚动需要的方法,这会发臭。
我不知道StageWebView,但我怀疑它有同样的问题(本机组件放在displayList的顶部)。
答案 1 :(得分:0)
您可以使用默认文本字段但请注意,当关注textinput时,您必须处理自动滚动到该文本字段的所有内容(因此,如果您将textinput放置得太靠近键盘区域,它将被键盘覆盖) ,SoftKeyboardType可能无法正确显示(如数字键盘)... 从我的观点来看,阶段文本是textinput的最佳选择。
这是我的工作,使您的StageText textinput按预期工作。
复制StyleableStageText的内容并创建一个新文件,如ExtendedStyleableStageText
在ExtendedStyleableStageText中添加2个函数:
public function freezeStageText(){ 如果(StageText的){ 如果(stageText.visible){ createProxyImage(); } stageText.visible = false; stageText.stage = null; } }
public function unFreezeStageText():void {
如果(StageText的){
如果(!stageText.visible){
disposeProxyImage();
}
stageText.visible = true;
stageText.stage = stage;
}
}
将spark.skins.mobile.supportClasses.StageTextSkinBase的内容复制到一个新文件,如ExtendedStageTextSkinBase。
复制spark.skins.mobile.StageTextInputSkin的内容并创建我们自己的textinput外观文件。 在你的皮肤中,skin类应该扩展你新创建的ExtendedStageTextSkinBase文件并添加函数
protected function commitCurrentState():void{
super.commitCurrentState();
if(currentState == 'disabled'){
textDisplay.freezeStageText();
}else{
textDisplay.unFreezeStageText();
}
}
在任何需要使用textinput的视图中,如果需要在视图顶部显示弹出窗口,请确保将所有启用的textinput更改为false,或者如果需要定位文本正确滚动时,可以将TouchInteractionStart和TouchInteractionEnd添加到滚动条然后收听事件,当用户开始触摸并滚动滚动条时,禁用视图中可见的所有文本输入,当用户停止触摸时,重新启用所有textinputs。
希望这有帮助。