2


设置仿真器样机

本章介绍如何定义仿真器样机。您可以修改仿真器的现有样机或为其创建新的样机。此过程即为设置仿真器样机


2.1 样机属性文件

仿真器样机由一个属性文件定义。每个样机属性文件均包含在 toolkit\wtklib\devices 下自己的子目录中,其中 toolkit 是 Sun Java Wireless Toolkit for CLDC 的安装目录。属性文件的名称与目录名称相同。

例如,DefaultColorPhone 样机由 toolkit\wtklib\devices\DefaultColorPhone 目录中的 DefaultColorPhone.properties 定义。

样机属性文件定义仿真器样机的外观和行为。包括指向图像和声音的指针,这些图像和声音文件可以在相同目录中,也可以不在相同目录中。例如,DefaultColorPhone 目录包含电话的图像,而 DefaultColorPhone 的图标和声音则在 wtklib\devices\Share 中定义。

本章其余部分介绍样机属性文件的内容。该属性文件是纯文本文件。您可以使用任何文本编辑器对其进行修改。通常,属性文件中的条目都有一个属性名,其后有一个属性值。属性名与值之间用冒号或等号分隔。以井号 (#) 开始的行是注释行。

创建新样机的最简单方法是复制现有样机并对其进行修改,例如:

1. 复制 DefaultColorPhone 目录。

2. 将该新目录命名为新样机的名称。

3. 重新命名属性文件使其与目录名相同。

如果目录命名为 NewSkin,则将其属性文件重命名为 NewSkin.properties


2.2 样机外观

仿真器样机的整体外观取决于各种因素,本节将逐一进行介绍:

2.2.1 样机图像

样机外观主要由三种图像决定:

1. 默认图像表示设备处于常规状态。

2. 高亮显示图像表示设备中的所有按钮都处于高亮显示状态,就像用户将鼠标置于按钮上时显示的那样。

3. 按下图像表示设备中的所有按钮都已按下。

每个图像都显示完整的设备。工具包使用这些图像的各部分来显示按钮高亮显示和按钮按下。

例如,在图 2-1 中显示了 DefaultColorPhone 中的这三种图像。

图 2-1 DefaultColorPhone 的常规图像、高亮显示图像以及按下图像

左侧图像:仿真器未执行操作。居中图像:选择了居中按钮。右侧图像:按下了居中按钮。

图 2-2 中显示每个小键盘某一部分的放大图像,您可以看到三种图像的不同之处。

图 2-2 常规、高亮显示以及按下按钮时的仿真器样机图像特写

左侧图像:仿真器未执行操作。居中图像:选择了居中按钮。右侧图像:按下了居中按钮。

在样机属性文件中,使用以下属性指定这三种图像文件:

图像文件可以是 PNG、GIF 或 JPEG 格式。所有的图像文件都要使用相同的尺寸。例如,DefaultColorPhone.properties 具有以下条目:

2.2.2 屏幕边界和可绘画区域

屏幕反映真实设备的显示内容。由整个屏幕边界、可绘画边界和决定诸如颜色数目等因素的其他参数定义。

整个屏幕边界是指全部显示区域。定义方式为从左上角图像文件原点 (0,0) 算起的长宽像素来计算。

图 2-3 屏幕边界

屏幕坐标的 x 表示宽度,y 表示高度。图像相对于左上角或 0,0 的位置放置。

在属性文件中按如下方法指定屏幕边界:

例如:

大多数设备无法使 MIDP 应用程序使用全部显示区域。屏幕的其余部分通常用于显示图标和各种指示器。同样,Sun Java Wireless Toolkit for CLDC 仿真器允许您定义整个屏幕的子集,即可绘画区域,该区域可供 MIDP 应用程序使用。可绘画区域的原点以相对于屏幕左上角的坐标表示。例如,DefaultColorPhone 仿真器样机使用顶栏显示图标,而使用底栏显示软标签和其他图标,如图 2-4 所示。

图 2-4 DefaultColorPhone 中的可绘画屏幕区域

默认彩屏手机可绘画屏幕区域的宽度和高度。顶栏和底栏不可绘画。

在仿真器样机属性文件中,可绘画区域按如下方法表示。

请注意,x 和 y 坐标相对于屏幕位置。另外,screenPaintableRegion 的宽度和高度值不能超过 screen.widthscreen.height 相对应的值。

例如:



注 - 对于全屏模式(在 MIDP 2.0 及更高版本中),仿真器可以使用从可绘画区域原点到屏幕右下角之间的区域。在 DefaultColorPhone 中,是指除顶栏外的整个屏幕区域。



2.2.3 屏幕特征

仿真器样机属性文件决定屏幕支持的颜色数目以及像素高宽比。iscolor 可以指定仿真器样机使用彩色还是灰度级。

2.2.3.1 isColor=[true|false]

对于彩色指定 true,对于灰度级指定 false

2.2.3.2 colorCount=number

colorCount,用于指定可用颜色的数目。对于灰度级设备则用于指定灰度级别数:

例如,DefaultColorPhone 的彩色屏幕为 4096 色:

isColor=true
colorCount=0x1000

2.2.3.3 enableAlphaChannel=[true|false]

该选项用于确定仿真器对 Alpha(透明)的处理。

2.2.3.4 gamma=number

该值用于确定 Gamma 修正。值 1 表示不进行任何错误修正。

2.2.3.5 screenDoubleBuffer=[true|false]

true 表示启用双缓冲,false 则表示禁用双缓冲。

2.2.3.6 screenBorderColor=color

screenBorderColor 指定屏幕中不可绘画区域的背景颜色。例如,DefaultColorPhone 使用以下颜色:

screenBorderColor=0xb6b6aa

2.2.3.7 screenBGColor=color

使用该属性可以设置灰度级设备上屏幕的背景颜色。

2.2.4 图标

Sun Java Wireless Toolkit for CLDC 仿真器支持使用图标,这些图标是用于向用户传递信息的小图像。通常情况下,图标位于屏幕上的可绘画区域之外。仿真器实现了一个固定的图标集,如表 2-1 所示。


表 2-1 仿真器图标

名称

描述

battery

显示电池状态

domain

表明正在运行的 MIDlet 的保护域

down

表明可以滚动

inmode

表明输入模式:小写、大写、数字

internet

显示 Internet 活动

left

表明可以滚动

reception

显示无线信号强度

right

表明可以滚动

up

表明可以滚动


 

可以定义图标的位置(相对于屏幕原点进行测量)、默认状态以及与可能的状态相对应的图像列表。例如,下面是对 DefaultColorPhonedown 图标的定义,该图标是一个下指箭头,当显示的列表或表单高度超过可用屏幕空间时,就会出现该图标:

icon.down: 113, 314, off
icon.down.off:
icon.down.on: ../Share/down.gif

第一行指定图标显示时的位置,对于 DefaultColorPhone,图标显示时位于底栏中央、可绘画屏幕区域之外。默认状态为 off

没有与 off 状态相对应的图像文件,而 on 状态使用 wtklib\devices\Share 目录中的 down.gif 图像。

另外一个有趣的示例是 inmode 图标,它有 7 种状态和 6 个相对应的图像文件:

icon.inmode: 113, 2, off
icon.inmode.off:
icon.inmode.ABC: ../Share/ABC.gif
icon.inmode.abc: ../Share/abc_lower.gif
icon.inmode.123: ../Share/123.gif
icon.inmode.kana: ../Share/kana.gif
icon.inmode.hira: ../Share/hira.gif
icon.inmode.sym: ../Share/sym.gif

仿真器的另外一个类似图标的部分是网络指示器。网络指示器不在屏幕中显示,而是显示在仿真器样机上。在 DefaultColorPhone 中,网络指示器是显示在仿真器样机左上角的一个小绿灯。网络指示器由两个属性进行定义:

例如,在 DefaultColorPhone 中,网络指示器如下所示:

其中,宽度和高度应与网络指示器图像的宽度和高度一致。

2.2.5 字体

仿真器使用的字体在样机属性文件中定义。实际上,您可以定义 MIDP 的 Font 类中可用的每个字型、字体样式和字体大小。格式如下:

font.face.style.size: font-specifier

您可以推测 MIDP Font API 中的字型、字体样式和字体大小参数,但是标识符在仿真器样机属性文件中是以小写字母表示。字型为 systemmonospaceproportional,字体样式为 plainbolditalic,字体大小为 smallmediumlarge

字体说明符遵循 Java Platform, Standard Edition (Java SE) java.awt.Font 类库中列出的约定。DefaultColorPhone 中的以下示例定义了三种字体大小的成比例斜体字体:

font.proportional.italic.small: SansSerif-italic-9
font.proportional.italic.medium: SansSerif-italic-11
font.proportional.italic.large: SansSerif-italic-14

您需要指定一个默认字体,以便在没有其他定义时使用该字体。在 DefaultColorPhone 中,使用的默认字体大小为 10 磅,字体为 SansSerif:

font.default=SansSerif-plain-10

字体还可以添加下划线。默认情况下,MIDP 实现支持带有下划线的字体,但是您也可以禁止特定字体使用下划线,方法如下:

font.face.style.size.underline.enabled=false

如果您愿意,可以禁止所有字体使用下划线,方法如下:

font.all.underline.enabled=false

除了使用系统字体之外,您还可以选择使用位图字体。位图字体只是一个包含某种字体的字符形状的图像。位图字体图像是一行文本,包含某一种字符形状。要定义位图字体,请使用以下属性:

font.name=font-property-file

字体属性文件包含下列属性定义:

图像文件可以为 PNG、GIF 或 JPEG 格式。它必须包含行字符。为便于查看,图 2-5 显示了两行字符。

图 2-5 位图字体图像

此图显示了一串标点字符、大写和小写字母以及其他符号。

高度、上升高度、下降高度和行距均以像素为单位指定。如果您不熟悉这些字体术语,请参阅 java.awt.FontMetrics 的 Java SE 文档。

字体属性文件还必须包含 ASCII 字符代码与像素在图像内的水平偏移量间的映射列表。在以下示例中,ASCII 代码 65 被映射到水平偏移量 124:

ascii_x-65=124

定义位图字体之后,其名称可以用作字体说明符。

2.2.6 软按钮标签

软按钮是没有固定功能的按钮。本章后面将详细论述这些按钮。软按钮的标签显示在屏幕上。仿真器样机属性文件决定软按钮标签的显示位置和显示方式。

软按钮标签的字体使用字体别名进行定义,字体别名是指定给字体的简称。每个软按钮标签由一个属性描述:

softbutton.n=x, y, width, height, font-alias, alignment

其中,alignment 的有效值为 leftright 以及 center

例如,以下属性向工具包指明对软按钮标签使用 12 磅的 Courier 字体:

首先,定义字体别名 softButton。第一个标签为左对齐,第二个标签为右对齐。

2.2.7 声音

MIDP 警报都有相应的声音。在 Sun Java Wireless Toolkit for CLDC 仿真器中,声音使用文件定义,对于 MIDP AlertType 类中列举的每种类型都有一个相应的文件。仿真器可以使用由底层 Java SE 实现支持的任何声音文件类型。在 Java SE Development Kit 1.5 中,包括 AIFF、AU、WAV、MIDI 以及 RMF。例如,在 DefaultColorPhone 中有如下定义:

alert.alarm.sound: ../Share/mid_alarm.wav
alert.info.sound: ../Share/mid_info.wav
alert.warning.sound: ../Share/mid_warn.wav
alert.error.sound: ../Share/mid_err.wav
alert.confirmation.sound: ../Share/mid_confirm.wav

如果没有为特定警报类型定义相应的声音,则将播放默认声音:

alert.confirmation.sound: sound-file

此外,还可以定义能模仿电话震动的声音。在 DefaultColorPhone 中,应如下所示:

vibrator.sound: ../Share/vibrate.wav


2.3 映射用户输入

仿真器样机的介绍分为两个部分。第一部分是上文中介绍的仿真器样机外观。第二部分定义用户输入在仿真器中是如何进行映射的。

2.3.1 键盘处理程序

键盘处理程序接收按钮的按压,并在仿真器中执行相应的操作。例如,如果您使用鼠标按下某个软按钮,则键盘处理程序就在仿真器中执行相应的操作。

键盘处理程序定义了一组标准按钮名称,您将在定义按钮时用到它们。您只需向仿真器指明按钮在样机中的位置,其余的事情则由键盘处理程序来处理。

Sun Java Wireless Toolkit for CLDC 仿真器包括两个键盘处理程序,一个用于具有 ITU-T 小键盘的电话设备 (DefaultKeyboardHandler),另外一个用于具有全标准键盘的设备。例如,DefaultColorPhone 中包括该键盘处理程序属性:

keyboard.handler = com.sun.kvem.midp.DefaultKeyboardHandler

DefaultKeyboardHandler 能识别下列标准按钮名称:09POUNDASTERISKPOWERSENDENDLEFTRIGHTUPDOWNSELECTSOFT1SOFT2SOFT3SOFT4USER1USER10

QwertyDevice 中,键盘处理程序格式如下:

keyboard.handler = com.sun.kvem.midp.QwertyKeyboardHandler

QwertyKeyboardHandler 支持与 DefaultKeyboardHandler 相同的按钮,同时还包括标准键盘上的按钮,如字母键、Shift 键和 Alt 键。

2.3.2 按钮

按钮使用名称和一组坐标来定义。如果提供两组坐标,则可定义矩形按钮。如果提供两组以上坐标,则可使用多边形区域定义按钮。

按钮区域以设备样机图像上的相对位置来定义。当用户将鼠标移至某个已定义的按钮区域时,即显示样机高亮显示图像中的相应区域。如果用户按下某个按钮,即显示样机按下图像中的相应区域。

按钮本身并无特别值得关注之处。它们只是将按钮名称与某个矩形或多边形区域相关联罢了。将按钮名称映射到仿真器中的某项功能是由键盘处理程序完成的。2.3.3, 为按钮指定台式机键盘键介绍了如何将台式计算机键盘上的键映射到按钮。

以下属性显示如何为按钮 5 定义矩形区域。该区域原点为 140, 553,宽度为 84,高度为 37

button.5 = 140, 553,  84,  37

下面是为星号按钮定义多边形的一个示例:

button.ASTERISK = 66, 605, 110, 606, 140, 636, 120, 647, 70, 637

用直线段连接所列出的各点,来定义该多边形:

66, 605
110, 606
140, 636
120, 647
70, 637

2.3.3 为按钮指定台式机键盘键

按钮可以与一个或多个台式机键盘键建立关联。也就是说,您可以使用台式机键盘控制仿真器,无需在设备样机上移动鼠标并按下鼠标按钮。

例如,DefaultColorPhone 允许您在台式机键盘上按下 F1 键模拟左软按钮。左软按钮在属性文件中定义为 SOFT1,如下所示:

button.SOFT1 = 78, 417, 120, 423, 126, 465, 74, 440

台式机键盘快捷键定义如下:

key.SOFT1 = VK_F1

这些键定义实际上是虚拟键盘代码 (virtual key code),在 Java SE java.awt.event.KeyEvent 类库中进行定义。有关详细信息,请参见 Java SE 文档。

如果您愿意,可以为某个按钮指定多个台式机键盘键。在下面的 DefaultColorPhone 示例中,台式机键盘上的 5 键或数字键盘上的 5 键都被定义为仿真器样机上按钮 5 的快捷键:

key.5 = VK_5 VK_NUMPAD5

2.3.4 映射游戏键

游戏操作已在 DefaultKeyboardHandler 中进行定义,但是您也可以用 QwertyKeyboardHandler 指定自己的游戏操作。使用如下格式:

game.function = button-name

可以为 LEFTRIGHTUPDOWNSELECT 功能中的任意一种。标准按钮名称已经在本章前面进行了介绍。

默认设置如下:

2.3.5 将键映射到字符

使用 QwertyKeyboardHandler,您可以指定按钮按下(包括单独按下按钮和使用 Shift 或 Alt 组合健按下按钮)时生成的字符。

使用如下格式:

keyboard.handler.qwerty.button = 'base-character' 'shift-character' 'alternate-character'

其中基本字符是该按钮正常情况下生成的字符,Shift 字符是在按住 Shift 键的同时按下该按钮时生成的字符,Alt 字符是在按住 Alt 键的同时按下该按钮时生成的字符。

您可以通过以下两种方式模拟 Shift 或 Alt 键与某按钮同时按下的操作:

例如:

keyboard.handler.qwerty.A = 'a' 'A' '?'

2.3.6 将命令映射到软按钮

命令是 MIDP 规范的一部分。这种灵活的方式可以指定用户需要的操作,而无需要求具体设备应该如何使操作变为可用。

一般来说,MIDP 设备使用软按钮来调用命令。命令文本显示在屏幕上,位于软按钮附近。如果命令数量多于可用的软按钮数量,则实现会将一个软按钮标签显示为菜单。按下菜单软按钮会显示一个包含可用命令的菜单。

根据 javax.microedition.lcdui.Command 中指定的命令类型,Sun Java Wireless Toolkit for CLDC 仿真器允许您指定特定类型命令出现的位置。例如,在具有两个软按钮的仿真器样机上,您可能希望 BACKEXIT 命令始终出现在左软按钮上,而 OK 命令出现在右软按钮上。

您可以在仿真器样机属性文件中使用如下格式指定这些偏好类型:

command.keys.command-type=button

例如,DefaultColorPhone 按以下方式定义命令偏好:

command.keys.BACK = SOFT1
command.keys.EXIT = SOFT1
command.keys.CANCEL = SOFT1
command.keys.STOP = SOFT1
 
command.keys.OK = SOFT2
command.keys.SCREEN = SOFT2
command.keys.ITEM = SOFT2
command.keys.HELP = SOFT2

通过指定其他按钮名称,您可以为特殊的命令类型指定其他首选按钮。例如,下面一行代码向仿真器指明将 BACK 命令映射到 END(如果可用),或映射到 SOFT1

command.keys.BACK = END SOFT1

最后,如果您愿意,可以指定软按钮只用于特定命令类型。以下定义可以限制 SOFT1 键只用于命令类型 BACKEXITCANCEL 以及 STOP

command.exclusive.SOFT1 = BACK EXIT CANCEL STOP

2.3.7 命令菜单

可用的软按钮数量少于命令数量时,会将命令放置在一个菜单中。Sun Java Wireless Toolkit for CLDC 仿真器提供对命令菜单的控制。您可以选择用于显示该菜单的按钮,也可以选择用于切换各菜单项的按钮,还可以选择为菜单显示的文本标签。

DefaultColorPhone 中的以下属性向仿真器样机指明使用第二个软按钮来显示或隐藏菜单。

command.menu.activate = SOFT2

默认情况下,UPDOWN 按钮用于切换菜单项,而 SELECT 按钮则用于选择命令。您可以使用下列属性更改这些指定:

2.3.8 暂停和恢复

MIDP 规范允许随时暂停应用程序 (MIDlet),例如,对诸如外来呼叫等其他电话事件做出响应。

您可以使用仿真器样机属性文件定义暂停和恢复 MIDlets.DefaultColorPhone 的台式机键盘快捷键,例如使用 F6 暂停,使用 F7 恢复:

midlet.SUSPEND_ALL = VK_F6
midlet.RESUME_ALL = VK_F7

2.3.9 指针事件

有一个属性(如下)可确定仿真器样机是否具有触摸屏:

touch_screen=[true|false]

如果仿真器样机确实具有触摸屏,指针事件将被发送给 Canvases


2.4 语言环境和字符编码

语言环境是指拥有相同语言、习俗或文化传统的地理位置、行政区域或社区。在软件中,语言环境是文件、数据和代码的集合,它包括使软件适应特定地理位置所必需的信息。

某些操作对语言环境较敏感,需要有指定的语言环境才能使信息与用户相适应,例如:

在 Sun Java Wireless Toolkit for CLDC 仿真器中,默认语言环境由平台的语言环境决定。

要定义特定的语言环境,请使用以下定义:

microedition.locale: locale-name

语言环境名称由两部分组成,用破折号 (-) 进行分隔,例如,en-US 是针对英语/美式英语指定的语言环境,而 en-AU 是针对英语/澳大利亚英语指定的语言环境。

第一部分是有效的 ISO 语言代码。这些代码是 ISO-639 定义的两个小写字母代码,可以在很多站点上找到这些代码的完整列表,例如:
http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt

第二部分是有效的 ISO 国家/地区代码。这些代码是 ISO-3166 定义的两个大写字母代码,可以在很多站点上找到这些代码的完整列表,例如:
http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html

CLDC 中的输入和输出 API 使用命名的字符编码,可以在 8 位字符与 16 位 Unicode 字符之间转换。特定的 MIDP 实现可以仅选择一个小编码集供 MIDlet 使用。

在仿真器中,默认编码是所在平台的默认编码。您的仿真器可能使用其他编码,如 UTF-8 和 UTF-16(假设可以在 Java SE 平台中使用这些编码)。

要定义仿真器样机使用的字符编码,请使用以下定义:

microedition.encoding: encoding

要定义包含所有可用编码的编码集,请使用以下定义:

microedition.encoding.supported: list of encodings

例如:

microedition.encoding: UTF-8
microedition.encoding.supported: UTF-8, UTF-16, ISO-8859-1,ISO-8859-2, Shift_JIS

要支持 Java SE 平台支持的所有编码,请将 microedition.encoding.supported 的定义保留为空白,如下所示:

microedition.encoding.supported:


注 - 无论 ISO-8859-1 编码是否在 microedition.encoding.supported 条目中列出,该编码对运行在仿真设备上的应用程序总是有效的。