哪些选项可用于使用Adobe AIR Android上处理文本输入?(What options ar

2019-08-19 21:37发布

哪些选项可用于使用Adobe AIR Android上处理文本输入? 有哪些优点和缺点每个选项?

Answer 1:

适用于Android上的AIR开发人员用于处理文本输入当前的选项有:

  • StageText的本地文本(默认)
  • TextInputSkin(spark.skins.mobile)
  • TextInputSkin(spark.skins.spark)
  • StageText的 + TextInputSkin(spark.skins.mobile)混合
  • 的StageWebView(在下面解释)
  • 本地视图

我将讨论一些优点及以下每一种方法的缺点。 如果我错过了什么(或者,如果你有其他的想法,我还没有想过),请让我知道!


舞台文本

  • 妥善处理输入在所有情况下? http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png
  • 正确显示在所有情况下? http://png-1.findicons.com/files/icons/2132/tiny/10/exclamation.png
    • 滚动时垂直对齐的问题。

默认情况下,在移动设备上运行TextInputs使输入使用StageText的(原始文本)。 StageText的有几个优点,如Adobe概括他们的在线文档中 ,包括软件键盘等的自动校正,定制

使用StageText的最大的劣势中描述bugbase票3302441 。 StageText的的定位变得当用户滚动打破。 文本框出现各自TextInputs,或者更糟糕,其他TextInputs内之外。 唯一的变通这一缺陷是设计的用户界面,不允许滚动。 显然,这可以为手机和平板手机非常困难。


TextInputSkin (spark.skins.mobile)

  • 妥善处理输入在所有情况下? http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png
  • 正确显示在所有情况下? http://png-1.findicons.com/files/icons/2132/tiny/10/exclamation.png
    • 插入某些版本的Android随机字符(例如:角落运行Android 2.3)。

这个组件使用StyleableTextField内部。 它针对移动应用进行了优化。

该组件插入附加的,任意字符输入到TextInput作为用户键入的某些的Android版本(例如:角落运行Android 2.3,点燃HD运行Android 4.0)。 见bugbase票3547601

如果您的应用程序仅本地化为英语(或者基于拉丁文的语言),并不需要支持旧的Android版本,则此组件可满足您的需要。


TextInputSkin (spark.skins.spark)

  • 妥善处理输入在所有情况下? http://png-1.findicons.com/files/icons/2132/tiny/10/exclamation.png
    • 不接受某些双字节字符(例如,韩文)。
    • 不接受某些设备(例如:三星Galaxy 10.1运行Android 4.0)的任何输入。
  • 正确显示在所有情况下? http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png

此组件使用的RichEditableText内部。 它不是针对移动应用进行了优化。 除此之外,它演示了几种缺陷(如上所列),使得它不适合使用。

此组件不正确处理某些双字节字符(在语言,如韩国)。 这些字符似乎要被插入到了TextInput(光标的进行,可见),但没有文本呈现给用户。 (这是可能的,这种问题可以使用嵌入字体来解决。)查看bugbase票3547591

虽然测试上面提到的第三项(输入不被接受特定设备上的)中观察到一个有趣的事情。 键入几个字符之后,如果用户将焦点切换到使用默认StageText的一个TextInput,至少一些缺少字符将被自动插入到新的领域。


舞台文字+ 文字输入皮肤 (spark.skins.mobile)混合

  • 妥善处理输入在所有情况下? http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png
  • 正确显示在所有情况下? http://png-1.findicons.com/files/icons/2132/tiny/10/exclamation.png
    • 有时候,软件键盘的“秀”动画连续触发两次,创造了不良的视觉效果。
    • 有时,集中处理是困难的,可能导致StageText的-的TextInput不显示的软件键盘,直到再次学习者接触它。

这种方法与TextInputSkin(spark.skins.mobile)的滚动功能结合StageText的好处。 总的想法是创建一个使用StageText的1个TextInput和其分配到屏幕上的固定位置。 这应该的TextInput默认隐藏。 (使用TextInputSkin)其他TextInputs可以创建,并根据需要在舞台上的位置。 当这些TextInputs获得焦点之一,隐藏的代理的TextInput应该显示和重点应转向它。 作为文本输入到代孕,改变处理程序应该将文本复制到用户选择的TextInput。 当用户按Tab键或点击将焦点设置在其他地方替代的TextInput应该被隐藏。

如果需要的话,我可以提供的本的代码示例。 有这种方法(如上所述)两个缺点,但它可能是他们是我实现的故障。


的StageWebView

  • 妥善处理输入在所有情况下? http://png-2.findicons.com/files/icons/1687/free_web_design/16/mini_warning.png 是/否
    • 根据价值<renderMode><fullscreen>此成分中可以适当为你工作。
    • 是有点棘手的工作。
  • 正确显示在所有情况下? http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png

这种方法涉及使用的StageWebView AIR应用程序内显示简单的HTML页面。 HTML页面包含<input type="text">对象,这使得采用Android的原生文本和软件键盘。 HTML页面和父AIR应用程序,虽然之间的通信是有点棘手,因为StageWebView中不支持在同是为Flash到JavaScript通信ExternalInterface的

从JavaScript沟通到Flash

从JavaScript(或HTML)为ActionScript沟通很困难,因为StageWebView中不允许ActionScript来添加回调。 StageWebViewBridge提供了这个功能已经有一段时间没有更新,当我尝试了,我无法获取内容使用Flex 4.6和AIR 3.5中显示。

还是有办法来传达信息的ActionScript使用的LocationChangeEvent 。 这背后的想法是对AIR应用程序,听取位置变化的事件,然后解析传入event.location信息。 对于简单的链接这工作很容易,但事情变得更加复杂,当谈到形式。 我试图解决一个之前下列方法:

  • http://png-1.findicons.com/files/icons/2132/tiny/10/exclamation.png一个onclick处理程序添加到表单提交按钮,设置window.location.href包含URL编码的钥匙串/值对。 这种方法不适用于在描述原因工作bugbase票3362483
  • http://png-1.findicons.com/files/icons/2132/tiny/10/exclamation.png一个onclick处理程序添加到表单提交按钮,动态地修改形状目标以包含URL编码的键/值对,然后提交表单。 这种方法是行不通的,因为当form.submit()被调用LocationChangeEvents不会出动。
  • http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png平变化处理程序添加到<input type="text">标记和修改href的属性的“提交”链接包含URL编码键/值对。 当用户点击该链接,您的ActionScript的LocationChangeEvent处理程序将被调用,您可以解析使用的输入数据的URLVariables类。

沟通从Flash到JavaScript的

使用JavaScript通信(调用方法,传递参数)使用的StageWebView的使用loadURL方法是这样的:

_stageWebView.loadURL( 'javascript:yourMethodName( "A string", true )' );

不幸的是使用loadURL方法有一个返回类型为void(这意味着你无法检索数据这种方式)。

其他困难

这种方法的最大缺点中描述bugbase票3535948 。 如果您的AIR应用程序使用<renderMode>direct</renderMode><fullscreen>true</fullscreen>然后通过StageWebView中输入文本会无法使用。 (响应将是缓慢的。用户将无法选择或删除字符)。如果您的应用程序不需要任何的标志,然后这条路线可以为你工作好。

对于全屏限制的一种解决方法是,只有当你的应用程序需要使用一个StageWebView的禁用全屏模式。 这是可以做到的StageDisplayState这样的:

// Turn off fullscreen
stage.displayState = StageDisplayState.NORMAL;

// Turn on fullscreen
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;

本地搜索

  • 妥善处理输入在所有情况下? http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png
  • 正确显示在所有情况下? http://png-5.findicons.com/files/icons/1156/fugue/16/tick_small.png

剩下的最后一个选项(即我所知道的)是编写显示文本输入和数据返回到您的AIR应用程序原生扩展。 这可能是在这个线程讨论到的最安全的(虽然最令人失望的)选项。



Answer 2:

我们可能有工作ATLEAST我们的场景的解决方案: http://blog.flexicious.com/post/Scrolling-Issues-With-TextInput-for-Flex-Air-Mobile-Native-StageText.aspx



文章来源: What options are available for handling text input on Android using Adobe AIR?