Adobe Flex Mobile - TextArea拒绝在Android上滚动,StageWebView根本不会滚动

时间:2012-07-05 19:01:17

标签: android ios flex mobile adobe

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

有人可以帮我解决这个问题吗?我绝对难过。

2 个答案:

答案 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按预期工作。

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

  2. 在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; }
    }

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

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

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

  7. 希望这有帮助。