有哪些选项可用于使用 Adob​​e AIR 处理 Android 上的文本输入?

2023-12-05

有哪些选项可用于使用 Adob​​e AIR 处理 Android 上的文本输入?每个选项的优点和缺点是什么?


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

  • 舞台文本原生文本(默认)
  • 文本输入皮肤(spark.skins.mobile)
  • 文本输入皮肤(火花.皮肤.火花)
  • 舞台文本 + 文本输入皮肤(spark.skins.mobile) 混合动力
  • 舞台网页视图(下面解释)
  • 原生视图

我将在下面讨论每种方法的一些优点和缺点。如果我错过了任何内容(或者如果您有其他我没有考虑过的想法)请告诉我!


舞台文本

  • Handles input properly in all cases? Yes
  • Displays properly in all cases? No
    • 滚动时的垂直对齐问题。

默认情况下,在移动设备上运行的 TextInput 使用 StageText(本机文本)进行输入。正如 Adob​​e 概述的那样,StageText 具有多项优势在他们的在线文档中,包括自动更正、软件键盘的定制等。

使用 StageText 的最大缺点如下所述错误库票 3302441。当用户滚动时,StageText 的定位会被破坏。文本字段出现在各自的 TextInput 之外,或者更糟糕的是,出现在其他 TextInput 的内部。解决此缺陷的唯一方法是设计一个不允许滚动的 UI。显然,这对于手机和平板手机来说非常困难。


文本输入皮肤(spark.skins.mobile)

  • Handles input properly in all cases? Yes
  • Displays properly in all cases? No
    • 在某些 Android 版本上插入随机字符(例如运行 Android 2.3 的 Nook)。

该组件使用可样式文本字段内部。它针对移动使用进行了优化。

当用户在某些 Android 版本上键入时(例如运行 Android 2.3 的 Nook、运行 Android 4.0 的 Kindle HD),此组件会在 TextInput 中插入额外的任意字符。看错误库票 3547601.

如果您的应用程序仅本地化为英语(或基于拉丁语的语言)并且不需要支持较旧的 Android 版本,那么此组件可能很适合您。


文本输入皮肤(火花.皮肤.火花)

  • Handles input properly in all cases? No
    • 不接受某些双字节字符(例如韩语)。
    • 在某些设备上不接受任何输入(例如运行 Android 4.0 的 Samsung Galaxy 10.1)。
  • Displays properly in all cases? Yes

该组件使用丰富的可编辑文本内部。它没有针对移动使用进行优化。除此之外,它还表现出一些使其不适合使用的缺陷(上面列出)。

该组件无法正确处理某些双字节字符(韩语等语言)。这些字符似乎被插入到 TextInput 中(光标明显前进),但没有向用户呈现任何文本。 (使用嵌入字体可能可以解决此问题。)请参阅错误库票 3547591.

在测试上述第三项(某些设备上不接受输入)时,观察到一件有趣的事情。输入几个字符后,如果用户将焦点切换到使用默认 StageText 的 TextInput,则至少一些缺失的字符将自动插入到新字段中。


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

  • Handles input properly in all cases? Yes
  • Displays properly in all cases? No
    • 有时,软件键盘的“显示”动画会连续触发两次,从而产生不良的视觉效果。
    • 有时焦点处理很困难,可能会导致在学习者再次触摸之前没有软件键盘的情况下显示 StageText-TextInput。

这种方法结合了 StageText 的优点和 TextInputSkin (spark.skins.mobile) 的滚动功能。总体思路是创建 1 个使用 StageText 的 TextInput 并将其分配到屏幕上的固定位置。默认情况下,此 TextInput 应隐藏。可以根据需要在舞台上创建和定位其他 TextInput(使用 TextInputSkin)。当这些 TextInput 之一获得焦点时,应显示隐藏的代理 TextInput 并将焦点转移到它。当文本输入代理项时,更改处理程序应将文本复制到用户选择的 TextInput。当用户通过选项卡或单击将焦点设置在其他位置时,代理 TextInput 应再次隐藏。

如果需要,我可以提供一个代码示例。这种方法有一些缺点(如上所述),但它们可能是我的实现的错误。


舞台网页视图

  • Handles input properly in all cases? Yes/No
    • 取决于值<renderMode> and <fullscreen>该组件可能适合您。
    • 开始工作有点棘手。
  • Displays properly in all cases? Yes

此方法涉及使用 StageWebView 在 AIR 应用程序内显示简单的 HTML 页面。 HTML 页面包含<input type="text">使用 Android 的本机文本和软件键盘的对象。 HTML 页面和父 AIR 应用程序之间的通信有点棘手,因为 StageWebView 不支持 Flash 到 JavaScript 的通信,就像外部接口.

从 JavaScript 到 Flash 进行通信

从 JavaScript(或 HTML)到 ActionScript 进行通信很困难,因为 StageWebView 不允许 ActionScript 添加回调。舞台网络视图桥提供此功能已经有一段时间没有更新了,当我尝试它时,我无法使用 Flex 4.6 和 AIR 3.5 显示内容。

仍然有一些方法可以使用以下方式向 ActionScript 传递信息位置改变事件。这背后的想法是让 AIR 应用程序侦听位置更改事件,然后解析传入的事件event.location供参考。对于简单的链接,这很容易工作,但当涉及到表单时,事情会变得更加复杂。在选择一种方法之前,我尝试了以下方法:

  • Add an onclick handler to the form-submit button that sets window.location.href to a string containing URL-encoded key/value pairs. This approach does not work for reasons described in bugbase ticket 3362483.
  • Add an onclick handler to the form-submit button that dynamically modifies the form-target to contain URL-encoded key/value pairs and then submits the form. This approach does not work because LocationChangeEvents are not dispatched when form.submit() is called.
  • Add onchange handlers to <input type="text"> tags and modify the href attribute of a "submit" link to contain URL-encoded key/value pairs. When this link is clicked, your ActionScript LocationChangeEvent handler will be invoked and you can parse the incoming data using the URLVariables class.

从 Flash 到 JavaScript 进行通信

要与 JavaScript 通信(调用方法、传递参数),请使用StageWebView的loadURL方法像这样:

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

不幸的是,loadURL 方法有一个 void 返回类型(这意味着您无法通过这种方式检索数据)。

其他困难

这种方法的最大缺点描述于错误库票 3535948。如果您的 AIR 应用程序使用<renderMode>direct</renderMode> or <fullscreen>true</fullscreen>那么通过 StageWebView 输入的文本将无法使用。 (响应将会缓慢。用户将无法选择或删除字符。)如果您的应用程序不需要这些标志中的任何一个,那么此路线可能适合您。

全屏限制的一种解决方法是仅当您的应用程序需要使用 StageWebView 时才禁用全屏模式。这可以通过以下方式完成舞台显示状态像这样:

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

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

原生视图

  • Handles input properly in all cases? Yes
  • Displays properly in all cases? Yes

最后剩下的选项(据我所知)是编写一个本机扩展,用于显示文本输入并将数据返回到 AIR 应用程序。这可能是本线程中讨论的最安全(尽管最令人失望)的选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有哪些选项可用于使用 Adob​​e AIR 处理 Android 上的文本输入? 的相关文章

  • 使用 facebook sdk 为应用程序生成哈希密钥

    我正在使用 facebook sdk 登录我的应用程序 该应用程序在 HTC 设备上运行良好 如果没有预装 Facebook 应用程序 该应用程序也可以在三星设备上正常运行 但是 如果移动设备上已经有 facebook 应用程序 然后用户安
  • Android Studio Profiler 中显示“无可调试进程”

    当我尝试在 Android Studio 中使用探查器时 我能够看到已连接的设备 但在探查器中收到 无可调试进程 有人可以帮助我为什么我收到 不可调试的进程 吗 您可以尝试以下任意 全部操作 使缓存失效并重新启动Android Studio
  • SQLite 中的 where 子句在 android 中不起作用:(

    当尝试在 SQLite 中查询某些数据时 我遇到了一个恼人的错误 这是我的代码 Cursor cursor db query TABLE IMAGES new String id name compareToThis null null n
  • 如何使用 Espresso 访问外部网站上的元素

    使用 espresso 我们单击 登录 按钮 该按钮将启动一个外部网站 Chrome 自定义选项卡 您可以在其中登录 然后重定向回我们的 Android 应用程序 Espresso 有没有办法 1 验证正在启动的 URL 是否正确2 访问网
  • 如何对齐文本和图标可组合项,以便即使文本溢出后它们也能保持在一起?

    我有一个文本和一个图标可组合项 我希望图标粘在可组合项的右侧 这是我的代码 Row verticalAlignment Alignment CenterVertically horizontalArrangement Arrangement
  • 如何在android上模拟PC的Esc键

    我正在写一个可以在android上玩flash的应用程序 但是我无法模拟ESC键 因为很多flash游戏需要ESC键才能返回主菜单 没有这个键我制作的应用程序将毫无用处 谁能告诉我如何模拟这个 我可以只发送一个密钥代码吗 但我也不知道键码
  • 应用程序可能在其主线程上做了太多工作 - Android

    您好 我正在开发一个 Android 应用程序 当我尝试从我的应用程序发送电子邮件时遇到此错误 我在后台发送邮件而不使用基于意图这个链接 http www oodlestechnologies com blogs Send Mail in
  • 如何知道 TTS 何时完成?

    我正在 Android 上实现交互式语音响应应用程序 我想知道如何确定何时tts speak 函数已完成通话 因此我可以调用我的语音识别器函数 public class TTSActivity extends Activity implem
  • Android 时间选择器在分钟滚动时自动更改小时

    例如 当我在 TimePicker 上滚动分钟时 在将分钟滚动到 59 后 小时会自动滚动到 7 因此新时间将为 07 59 同样的方式 如果我有 07 59 并且我将分钟滚动到 00 小时将自动滚动到 8 所以时间将是 08 00 此逻辑
  • 如何删除旧版本的Android Studio

    我必须释放硬盘中的一些空间 并寻找要删除的内容 我发现我有许多引用旧版本的 Android Studio AS 文件夹 我发现文件夹的路径是 C Users mysuername 我想要的是删除旧版本并只保留最新版本的方法 当时是 ASPr
  • 在 Phonegap 3.x CLI 上构建 android 发布 apk

    如何使用 Phonegap 3 x CLI 在本地构建 Android 应用程序并准备发布 我检查了项目的platforms android目录中生成的bin文件夹 并且只有 debug APK 顺便说一句 我使用这个命令 phonegap
  • WebView 未绘制,WARN/webcore(5336):第一次布局后无法获取 viewWidth

    我的应用程序有一个视图 可以使用以下代码以编程方式添加到活动中 RelativeLayout LayoutParams layoutParams new RelativeLayout LayoutParams 480 75 Relative
  • android 销毁时是否有任何视图回调?

    我有一个自定义视图组件 我在片段或活动中使用了它 我想知道当它从片段 活动中销毁时是否有回调 View 没有回调 除了finalize 但我不认为这就是你所要求的 查看有onDetachedFromWindow 当它从屏幕上移除时 但这与它
  • 如何在具有多种字体大小的 TextView 中调整行高?

    我有一个包含 Spannable 字符串的 TextView 该字符串包含一堆文本 其中第一个单词的字体大小是字符串其余部分的两倍 问题在于 由于第一个字的大小增加 第一行和第二行之间的行间距比后续行之间的行间距大得多 http img s
  • AsyncTask:DoInBackground(String ...)与DoInBackground(Params ...)冲突?

    当尝试使用时Async task要执行 HTTP post 我得到以下信息 ASyncTask DoInBackground String clashes with DoInBackground Params in Android os A
  • Osmdroid:如何从我自己的位图(图块)创建和加载地图?

    我开始使用 Osmdroid 我想使用这项技术来显示有关 F1 赛道的地图 我有一张大图片 我可以将它切割成更小的图块 我可以修改osmdroid库来上传这些图片吗 我想将这些位图 图块 保存在我的资产文件夹中 我非常不知道如何做到这一点
  • 按歌曲获取封面图片

    是否可以按歌曲而不是按专辑获取封面图片 因为我有一张自编的歌曲专辑 而且它们都有不同的封面图片 但是当我想查询它们时 我总是得到相同的图片 String ARG STRING MediaStore Audio Media ALBUM ID
  • 找出该月第一个星期日/星期一等的日期

    我想在java中检测每个月第一周 第二周的第一个星期日 星期一的日期 我怎样才能实现它 我已经检查了 java 中的 Calendar 类和 Date 类 但无法找到解决方案 所以请帮助我解决这个问题 Calendar calendar C
  • Xamarin.Android JmDNS 绑定问题

    我开始研究 Xamarin Android 的 JmDNS 绑定 我设法构建了绑定 但无法从代码中引用它 https github com ytn3rd monodroid bindings tree master JmDNS https
  • 具有通用类的自定义 Android 适配器

    我正在尝试在 Android 中创建一个通用适配器 所以我不能一遍又一遍地编写它 问题是 它正在工作 但它的回收效果不是很好 它显示了我想要的内容 但是当我滚动时 它的顺序不同 public class CustomListViewAdap

随机推荐