如何控制gui:
1. 启动gui
设置usePolishGui属性,该属性在build.xml的<build>元素下。Polish会自动加入必要的代码。
当true或者yes被设置,gui会启动,触发的目标设备不满足基本要求(如,最大jar大小要大于100kb,色深至少8位),这时候会使用基本的gui。如果属性是always,gui总会被使用。
相应代码(build.xml):
<j2mepolish>
<info
license="GPL"
name="Roadrunner"
vendorName="A reader."
version="0.0.1"
jarName="${polish.vendor}-${polish.name}-roadrunner.jar"
/>
<deviceRequirements>
<requirement name="Identifier" value="Generic/midp1" />
</deviceRequirements>
<build
usePolishGui="true"
>
<midlet class="com.apress.roadrunner.Roadrunner" />
</build>
<emulator />
</j2mepolish>
你也可也通过定义预处理指令polish.usePolishGui
以下代码用来为s60启动gui
<j2mepolish>
<info
license="GPL"
name="Roadrunner"
vendorName="A reader."
version="0.0.1"
jarName="${polish.vendor}-${polish.name}-roadrunner.jar"
/>
<deviceRequirements>
<requirement name="Identifier" value="Generic/midp1" />
</deviceRequirements>
<build
usePolishGui="false"
>
<midlet class="com.apress.roadrunner.Roadrunner" />
<variables>
<!-- activate the GUI for Series 60 devices -->
<variable
name="polish.usePolishGui"
value="true"
if="polish.group.Series60" />
</variables>
</build>
<emulator />
</j2mepolish>
2. 配置gui
a) 全屏模式
i. 设置<build>元素的fullScreen (yes/true, no/false , menu)。当程序使用command时候, 你必须使用menu。这时候菜单条由polish绘制,而且可以通过css来设计
ii. 使用polish.FullScreen预处理参数
<j2mepolish>
<info
license="GPL"
name="Roadrunner"
vendorName="A reader."
version="0.0.1"
jarName="${polish.vendor}-${polish.name}-roadrunner.jar"
/>
<deviceRequirements>
<requirement name="Identifier" value="Generic/midp1" />
</deviceRequirements>
<build
usePolishGui="true"
fullscreen="menu"
>
<midlet class="com.apress.roadrunner.Roadrunner" />
<variables>
<!-- Use the normal fullscreen for Siemens devices -->
<variable
name="polish.FullScreen"
value="true"
if="polish.vendor == Siemens" />
</variables>
</build>
<emulator />
</j2mepolish>
有些,midp2.0设备不支持menu模式,因为他们不在按软键的同时传递按键事件。POLISH通过查找device database来决定是否支持menu模式,如果hasCommandKey被设置,这设备支持纯midp 2.0 menu模式。当然你可以通过设置key.LeftSoftKey和key.RightSotfKey来定义键值。当没有定义时候,-6是左软键,-7是右软键,
支持全屏模式的代码参考:
<device
supportsPolishGui="true">
<identifier>Siemens/CX65</identifier>
<features>hasCommandKeyEvents</features>
<capability name="ScreenSize" value="132x176"/>
<capability name="key.LeftSoftKey" value="-1" />
<capability name="key.RightSoftKey" value="-4" />
</device>,
b) Commands,Labels,.和gui行为
预处理命令 解析
polish.skipArgume ntCheck 方法参数不会被检查,有助于提高运行时的表现和减少应用程序大小
polish.animationInterval (默认100) 动画时间间隔。
polish.classes.ImageLoader 通常polish从jar文件中用Image.createImage(String url)加载图片。这个方法在很多时候适用,但有时图像必须从rms或者Internet获取。这是你可以定义polish.classes.ImageLoader,这个类必须实现java.microedition.lcdui.Image loadImage(String url)throws IOException来提取图形。
polish.ChoiceGroup.suppressMarkCommands 默认为false ,一个多选的list或ChoiceGroup默认将命令”mark”,”unmark”添加到菜单,如果想取消这些命令,设置这个参数为true
polish.ChoiceGroup.suppressSelectCommand 默认为false,一个内含的,或弹出的ChoiceGroup(/list)通常有一个选择命令,同样可取消
polish.TextField.useDirectInput 默认为false,设置允许Textfields和TextBoxes的直接输入模式
polish.TextField.suppressClearCommand 默认f alse 取消Textfield的clear命令
polish.TextField.suppressDeleteCommand 默认false取消Textfield的delete命令
polish.TextField.suppressCommands 默认f alse 取消Textfield的clera 和delete命令
polish.TextField.showInputInfo 默认true 当前输入法提示
polish.TextField.InputTimeout 默认1000 输入时间间隔
polish.TextField.charactersKey1 默认 ".,!?:/@_-+1" 数字键1被按时,出现的可选符号
polish.TextField.charactersKey2 " abc2" 同上
polish.TextField.charactersKey3 "def3"同上
polish.TextField.charactersKey3 "ghi4" 同上
polish.TextField.charactersKey5 "jkl5" 同上
polish.TextField.charactersKey6 "mno6"同上
polish.TextField.charactersKey7 "pqrs7"同上
polish.TextField.charactersKey8 "tuv8"同上
polish.TextField.charactersKey9 "wxyz9"同上
polish.TextField.charactersKey0 " 0"同上,在摩托罗拉手机上这能有效控制输入法切换
polish.TextField.charactersKeyStar ".,!?:/@_-+"同上在摩托罗拉手机上这能有效输入空格
polish.TextField.charactersKeyPound 同上 在索爱机子上有效输入空格
polish.command.ok 默认OK 当全屏时候,OK命令的标签
polish.command.cancel 默认Cancel Cancel命令的标签
polish.command.select 默认Select 内含或互斥的list或ChoiceGroup的select命令标签
polish.command.mark 默认mark,多选list或choicegroup的mark命令的标签
polish.command.unmark 默认 unmark,多选list或choicegroup的mark命令的标签
polish.command.options 默认options,打开选项的命令的标签
polish.command.delete 默认Delete TextField的delete命令标签
polish.command.clear 默认Clear TextField的Clear 命令标签
polish.title.input 默认input,当Textbox对应的TextField没有标签时候使用的标签
polish.usePolishGui 启动,取消PolishiGui
polish.FullScreen 全屏模式Possible values are true, false, and menu.
3. 控制Textfield
默认使用原生的输入框,当用户希望输入时候,一个原生的TextField在第二个屏幕打开,这个方法的好处是用户可以使用全部的输入辅助功能,如T9,手写识别等,你经常需要使用原生输入模式来处理触摸笔输入设备或处理长字母输入。
你可以启动直接输入模式,通过textfield-direct-input CSS属性,或者设置TextField.useDirectInput预处理指令。使用预处理指令能够提供你的程序性能和减少程序大小,但是在这种情况下对所有的Textfield和TextBox都是使用直接输入模式的。
<variable name="polish.TextField. useDirectInput" value="true" if="!polish.hasPointerEvents"/>.将在没有触摸笔的机器上使用直接输入模式。
当你使用直接输入模式你可能希望根据你的本地化使用额外的字母,你可以定义polish.TextField.charactersKey0等,如<variable name="polish. TextField. charactersKey2" value="abc2äåæ" />.
如果你需要使用直接输入模式,你可以使用任何输入,但是通过设定输入模式为数字,先创建一个NUMERIC TextField然后设置contraints为any ,如
field =new TextField( "password: ", null, 20, TextField.NUMERIC );
field.setConstraints ( TextField.ANY );.
如果你的Textfield通常输入的是数字的话,这样可以提高应用程序的使用效率
4. 使用不同的设计
<j2mepolish>
<info
license="GPL"
name="Roadrunner"
vendorName="A reader."
version="0.0.1"
jarName="${polish.vendor}-${polish.name}-roadrunner.jar"
168 CHAPTER 12 ■ WORKING WITH THE GUI/>
<deviceRequirements>
<requirement name="Identifier" value="Generic/midp1" />
</deviceRequirements>
<!-- symbol: don't check method-parameters: -->
<build
usePolishGui="true"
fullscreen="menu">
<midlet class="com.apress.roadrunner.Roadrunner" />
<resources
dir="resources2"/>
</build>
<emulator />
</j2mepolish>
你可以用这种机制来为不同的用户群定义不同的表现,你同样可以在不同的build使用不同的文字。