Seven Yu @ 11/15/2009 (1:42 pm)

如何在 flash lite 1.1 中监听日本手机的上下键

这里讨论的手机特指日本最大的手机厂商中的两家: au (KDDI) 和 docomo (i-mode).

这两种手机中的上下键对应 PC 中的 Tab 和 Shift Tab 操作, 左右键用来访问浏览器的历史记录 (另外一家手机厂商 SoftBank 中支持 4 方向键)

但是, 在 flash lite 1.1 中是无法监听 Shift Tab 键的, 这个问题困扰了我很久, 因为日本手机用户习惯了上下键加确定键的简单操作, 所以对于一般的应用来说上下键的支持是最基本的.

但既然不能直接监听就只能想其他方法了. 开发过程中我们观察到上下键可以切换焦点, 正如 PC 中的 Tab 和 Shift Tab 的功能一样, 可以正向或反向循环切换焦点, 浏览器中切换链接的焦点, flash lite 中则可以切换场景中按钮的焦点 (注意这里特别指出是场景中的按钮, 场景外的按钮无法获得焦点)

当按钮获得焦点时会触发 rollOver 事件, 这样在场景中放三个按钮, 再利用一个标识变量就可以判断焦点循环的方向, 从而监听到用户的上下键操作了.

由于场景外的按钮不参与焦点的获取, 所以可以把其他键盘监听代码写到场景外的一个按钮上, 这样代码比较清晰, 方便管理. 但这样做也有一个潜在的问题, 就是当用户手机屏幕过宽的情况下, 有可能键盘监听按钮会进入场景, 这样获取焦点的顺序就被扰乱了, 解决方法有两个:

  1. 去掉场景外的按钮, 把键盘监听事件写在场景中三个按钮的任意一个上;
  2. 把按键监听按钮的 x 坐标设置得足够大, 手机屏幕总不会有 1:20 比例的吧 ╮(╯_╰)╭

原理很简单, 具体实现详见源文件: 源文件下载

还有很重要的一点需要注意:
在 flash lite 1.1 , 2.0 甚至很多更高版本中 (甚至 SoftBank 的 flash lite 3.0 中) 都不允许自动发送网络请求 (即 LoadMovie, LoadVariables 或 getURL 之类的操作), 这种请求必须在用户执行按键操作的时候才允许发送 (keyPress, keyDown, keyUp 事件), 而且每一次按键只能发送一条请求, 其他不合法的或连续的网络请求都将被忽略. 因此本文提到的 rollOver 模拟的上下键监听是不能发送网络请求的, 所以最好的解决方案是用 2 8 4 6 和 5 等数字键作为上下左右确定键的替身, 来实现同样的功能.

补充:

希望本文对您的 flash lite 开发有所帮助, 如有遗漏和错误之处欢迎指正. 谢谢 :D

Seven Yu @ 11/14/2009 (1:18 pm)

如何设置日本手机文本框默认输入模式

Tags: , , ::

日本手机中有好几种输入模式, 包括平假名, 片假名, 英文 和 数字, 根据上下文自动开启对应的输入模式无疑可以极大提高用户体验, 下面就是关于该问题的针对日本三大手机厂商的解决方案:

au(KDDI), docomo(i-mode) 利用 "istyle" 属性, 对应值:

属性值 Mode 1
(kana input mode)
Mode 2
(pager message input mode)
1 Full-size kana Full-size characters
2 Half-size kana Half-size characters
3 Alphabetic Half-size characters
4 Numeric Half-size characters
PLAIN TEXT >> HTML:
  1. <input type="text" istyle="4" />

SoftBank 使用 "mode" 属性, 对应值:

属性值 含义
hiragana 全角ひらがな
katakana 全角カタカナ
hankakukana 半角カタカナ
alphabet 英字
numeric 数字
PLAIN TEXT >> HTML:
  1. <input type="text" mode="numeric" />

参考网址:

BTW: 最近在公司忙一个日本 flash lite 项目, 如果有时间我会将项目中遇到的一些问题, 难点和小技巧等总结出来, 发布到这里 :D 如有错误, 欢迎指正, 谢谢.