1

我试图让 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()。两种解决方案都不起作用。

有人可以帮我解决这个问题吗?我完全被难住了。

4

2 回答 2

0

您可以使用默认文本字段,但请注意,当文本输入聚焦时,您必须处理自动滚动到该文本字段之类的所有内容(因此,如果您将文本输入放置得太靠近键盘区域,它将被键盘覆盖),SoftKeyboardType 可能显示不正确(如数字键盘)...从我的角度来看,舞台文本是文本输入的最佳选择。

这是我的工作,以使您的 StageText 文本输入按预期工作。

  1. 复制 StyleableStageText 的内容并创建一个新文件,如 ExtendedStyleableStageText

  2. 在 ExtendedStyleableStageText 添加 2 个函数:

    公共函数 freezeStageText(){ if(stageText){ if(stageText.visible){ createProxyImage(); } stageText.visible = false; stageText.stage = null; } }

    公共函数 unFreezeStageText():void{ if(stageText){ if(!stageText.visible){ disposeProxyImage(); } stageText.visible = true; stageText.stage = 舞台;}
    }

  3. 将 spark.skins.mobile.supportClasses.StageTextSkinBase 的内容复制到一个新文件,如 ExtendedStageTextSkinBase。

  4. 在您的 ExtendedStageTextSkinBase 中将 textDisplay 更改为 ExtendedStyleableStageText
  5. 复制 spark.skins.mobile.StageTextInputSkin 的内容并创建您自己的文本输入皮肤文件。在您的皮肤中,皮肤类应该扩展您新创建的 ExtendedStageTextSkinBase 文件并添加函数

        protected function commitCurrentState():void{
          super.commitCurrentState();
          if(currentState == 'disabled'){
             textDisplay.freezeStageText();
          }else{
             textDisplay.unFreezeStageText();
          }
        }
    
  6. 在您需要使用文本输入的任何视图中,如果您需要在视图顶部显示一个弹出窗口,请确保将所有启用的文本输入更改为 false,或者如果您需要在滚动时正确定位文本,您可以将 TouchInteractionStart 和 TouchInteractionEnd 添加到滚动条,然后监听事件,当用户开始触摸并滚动滚动条时,禁用视图中可见的所有文本输入,当用户停止触摸时,重新启用所有文本输入。

希望这可以帮助。

于 2013-12-23T22:50:57.167 回答
0

如果 TextArea 和 TextInput 使用它们的 StageText 外观,则它们不支持滚动。您需要将 TextArea 设置为使用“TextAreaSkin”进行滚动才能正常工作。
TextArea 和 TextInput 在使用 StageText 皮肤时甚至不支持软键盘的滚动/平移。

原因是当 TextArea 使用 StageText 皮肤时,AIR 实际上使用的是操作系统原生文本框并将其放置在您的 displayList 之上。这就是为什么使用 StageText 外观的文本框将始终出现在所有其他显示对象之上的原因。
这可能很好,因为我们可以在我们的应用程序中使用本机显示对象,让我们可以访问操作系统必须提供的所有服务(自动更正、android 软键盘上的“下一步”/“完成”按钮等),但是有很多情况下你不能使用它们。

因此,您要么必须返回到 TextAreaSkin,因为您不再获得设备本机软键盘,所以它很臭,或者找到一种方法来解决您的滚动需求。

我不了解 StageWebView,但我怀疑它有同样的问题(原生组件位于 displayList 之上)。

于 2012-08-02T10:54:32.073 回答