BlackBerry 用户界面开发实例(二)

作者: 杨江

 

 

3.5     最终的 行结 如图

你可以 到屏 中间 示的三 待审 的记 户打算 过菜 对审 进行操

 

BlackBerry 用户界面开发实例(二)_第1张图片

4 为从窗口添加显示和 入字 ;使用布 管理器处理   U I 布局,

 

 

4.1 从窗 用户 面的 从程序设 的角 ,从 口被分 为两 重要分: 申请 辑区 ,按 。另外还 有标题 区域, 割横线

 

 

|-------------------------- |

|            标题                                  |

|-------------------------- |

|         多个输                              | < --------- 编辑区 displayMessa ge( ) 方法

|--------- 分割横线 - -- -------|

|      同意                                        | < --------- 按钮区 displayButto n() 方法

|-------------------------- |

 

4.2 构造方法

编辑区 包括 个输 EditField ,一 多行录 输入域 Te x tF ie ld ,一个时 间输入域 DateField 钮区域 括两 按钮 排列。

 

public class MessageViewScreen extends MainScreen { MessagesListField _list;

Message _message;

boolean _editable;

final static int MAX_CHARS = 128; EditField senderField;

EditField subjectField; TextField contentField; DateField dateField;

 

ButtonField newButton; ButtonField agreeButton; ButtonField returnButton;

 

//   父窗口 数据 list message 过来,并 且通过 editable 数告 这个 口是用 显示 据, 用来编 数据

public MessageViewScreen(MessagesListField list, Message message, boolean editable)  {

_list = list;

_message = message;

_editable = editable;

 

displayMessage();

 

add(new SeparatorField());

 

displayButton();

 

 

 

 

 

4.3     编辑区域   cod in g

  d is p lay Me s s age () ,以可 改或 只读 (s ty le) 在窗 中添 各种 入字段 在屏幕

(Sc re e n ) 面添 输入 (F ie ld ) 件很 易的 只需要 add ( 字段 ) 就可以 但是 客户新 求设 所有 段的背 颜色 淡蓝色。一 种常用 方法 使用 V e rtica lFie ld Man age r


布局管 器类 在布 器中设 背景 ,然 调用 m an ager.add (f i e ld ) 相应 入字 进这个 布局管 器里

 

protected void displayMessage(){

VerticalFieldManager manager;

manager = (VerticalFieldManager)getMainManager();

Background bg = BackgroundFactory.createSolidBackground(Color.LIGHTBLUE);

manager.setBackground(bg);

 

 

long style;

style = EditField.READONLY;

if (_editable) style = EditField.EDITABLE;

 

senderField = new EditField(" 提交人 : ", _message .getSender(), MAX_CHARS, style);

manager.add(senderField);

 

// 其他类 代码

。。。

dateField = new DateField(" 提交日期 : ",  (new Da te()).getTime(),DateFormat.DATE_MEDIUM);

manager.add(dateField);

 

// 其他类 代码

。。。

}

 

 

 

 

 

 

 

4.3   按钮区域   cod in g

d is p lay Butt on () 方法中, 添加两 命令 钮, 命令按 按照 局管 Fo oterMan ager 处理被 着摆 ,中 定的间 ;两个命 事件处 Fie ld Chan ge Li s te n e r 关联 以处 理用户 击按 的事 而审批 过或者是 上级父 口。


protected void displayButton() {

//------------------------------------------------------------------

// 创建按 点击     件监       FieldChangeListener

FieldChangeListener myButtonListener = new FieldChangeListener() {

public void fieldChanged(Field field, int context) { ButtonField fieldChanged = (ButtonField) field;

 

//begin testing to see what field changed if( fieldChanged == newButton) {

Message message = new Message(new Date(), sen derField.getText(),

subjectField.getText(), contentField.getText(), Message.STATUS_NEW);

_list.addMessage(message);

close();

}

// 其他类 代码

}

};

 

//-------------------------------------------------- ----------------

FooterManager manager = new FooterManager();

 

newButton = new ButtonField(" 提交 ");

newButton.setChangeListener(myButtonListener);

if (_editable) manager.add(newButton);

 

// 其他类 代码

 

// 最后把 局管 器连 的两个 钮一 窗口上

add(manager);

}

 

 

 

 

 

4.4   义布 管理器

BlackBe rry UI API 中,屏幕 窗口的 局管 器有 比如 Flow Fie ld Man ager, G rid Fie ld Man ager, H orizon ta lFie ld Man ager,   Vert icalFie ld Man ag e r 伸出 来的各 子类 但是 要求多 样,这 窗口 理器 能满 有客 的要

在本案中 客户 出屏 下方的 个命 按钮 排摆放 这看 去是 以用 H orizon ta lFie ld Man ager 来处 理,但 客户 指定 个命令 钮摆 的时 一个按 距离屏 幕左边 个字 大小 个按钮 离屏 中间 个字符 小。 就需 自己编 一个窗 口管理 ,在 s ub lay ou t(in t w id th , in t h e ight ) 方法中 se tPo s ition Child () 方法 个按钮 Fi e ld 摆放位 ,通过 lay ou tCh ild( ) 方法设置 Fie ld 的高度 / ;通过 s e tE xte nt (int width , in t h e ight ) 方法设 置这个 域的 度和 度。


 

p ublic class FooterManager extends Manager {

public FooterManager() {

super(0);

}

 

protected void sublayout (int width, int height) {

int fieldWidth = 100;

int filedHeight = 100; Field field = getField(0);

// 设置 filed x 置为 左边 ,空两 字符; y 位置为 0

 

setPositionChild(field, getFont().getHeight() * 2, 0);

layoutChild(field, fieldWidth, filedHeight); //lay out the field

 

field = getField(1);

// 设置 filed x 置为 中间     左边起 空两 字符; y 位置为 0

setPositionChild(field, width/2 + getFont().getHei ght() * 2, 0);

layoutChild(field, fieldWidth, filedHeight); //lay out the field

 

// 设置整 区域 高度为       字段的 度即 ,不 要很高

setExtent(width, getFont().getHeight() + 20);

}

 

 

 

 

 

4.5   从窗口 最终 果如图

 

BlackBerry 用户界面开发实例(二)_第2张图片  

   

 

 

5 处理黑莓手机的返回 (Re t ur n ) ,轨迹 (T r ac kBa ll ) 事件 输入字 段数 变化等事件

5.1 键盘 / 球事 处理

在主窗口 MessagesLis tViewScreen 中,每当用 户按下 莓的 迹球, 者是按 下键盘 面的 车键 都希望 打开 查看 中的申


protected boolean navigationClick (int status, int time) { Message message = list.getSelectedMessage();

 

//Open message screen

MessageViewScreen screen = new MessageViewScreen(list, message, false); UiApplication.getUiApplication().pushScreen(screen);

return true;

}

 

protected boolean keyChar (char key, int status, int time) {

boolean retVal = false;

 

if(key == Characters.ENTER){

Message message = list.getSelectedMessage();

 

//Open message screen

MessageViewScreen screen = new MessageViewScreen(list, message, false);

UiApplication.getUiApplication().pushScreen(screen);

retVal = true;

}

 

return retVal;

}

 

 

 

 

5.2   输入 段数 变化事件 处理

在从窗口   M e s s age Vie w Scr e e n ,如 是新 申请 当用户 屏幕 录入 改了数 然后

q we rt 盘上的 R e tu rn 试图关 当前 口的 我们可 on Sav e () 捕获用 的退出 事件, 用户 输入 来。

这里我们 新建 录保 到主窗 的申 记录列表 _ li s t  

 

protected boolean onSave() {

boolean save = super.onSave();

if (save) {

Message message = new Message(new Date(dateField.getDate()),

senderField.getText(), subjectField.getText(), contentField.getText(), Message.STATUS_NEW);

_list.addMessage(message);

}

return save;

}

 

 

 

 

 

6 配置模拟器 文显示 单步跟踪调试

6.1 配置 拟器使 之具备显 示中文 录入 文的 大部分开 工具 ( J DE / eJ DE) 内置的 者是 立安 机模拟 缺省 没有 文语言 ,缺省 用户界 是英 。我 编辑相 的模 器配置 x m l 文件, 入中 语言 入法, 后在模 拟器里 点击 Op tion s - > L an gu age an d Te xt Inpu t   - > L an g u age ,选 “简 中文”, 在模拟

Op tion s - - > L an gu age an d Te xt Inpu t   - > Inpu t Lan gu age ,选择 拼音 简体 ”,保 即可; 如果在 试模 器配置 x m l 文件之 运行 这个 ,那么 要执行 compon e n ts/ s i m u lat or /cle an . b at 脚本把模 器环 为干净 境, 程大概 2

3   分钟。

 

Com p on e n t Pa ck 5.0/O S 5.0/9 700 器的 置:

编辑   e J DE   安装目录   p lu gins /n e t.rim . e jd e .co m p on e n tp ack 5.0.0_ 5.0.0.1 4 /


compon e n ts/ s i m u lat or /9700 . xm l < /Si m u lat orCon f igurat io n > 前加 下面 ,就 以让

9700   拟器 备显 中文 能力。

< App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN< /App lic at ion >

< App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.de f au ltRe s ou rce< / App lic at ion >

< App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.lo caliza tio n < / App lic at ion >

< App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.re nde rin g< /A pp lic at ion >

 

 

 

Com p on e n t Pa ck 4.5/O S 4.5/8 300 器的 置:

编辑   e J DE   安装目录   p lu gins /n e t.rim . e jd e .co m p on e n tp ack 4.5.04.5. 0.21 /

compon e n ts/ s i m u lat or /8300 . xm l   < /Si m u lat orCon f igurat ion > 前加 下面 行就可   9700

模拟器 备显 中文 中文的 力。

< App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN_P iny in < /App l ication >

< App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.re nde rin gSup p ort</App lic at ion >

 

6.2 单步 踪调试

  BlackBe rry   发环 手机程 进行 步跟 是一件易的 事情 Black Be rry   Ja v a   Plug -

in for E cli p s e 以借助 e cli p s e 强大的 d e bu g 能力 代码 踪调 体操作 简单, 只要在 码编 界面 击左边 跟踪 然后点击 e cli p s e 按钮 De b u g 即可。

 

 BlackBerry 用户界面开发实例(二)_第3张图片

 

d e bu g 过程中 e cli p s e d e bu g 功能 都能 使 ,包括 步跟 调试 和编辑 码中的 变量等 。这 就不

提示:手 程序   J a v a   代码   Sy s te m .ou t.p rin tln   的输出 有在   e J DE   d e bu g   状态 输出到   e cli ps e

con s ole   口上。


 

BlackBerry 用户界面开发实例(二)_第4张图片  

 

 

 

7 OT A 应用

应客户的 求, 要为 OS 的手机 8 300/ 970 0 分别 包应 程序为 jad /a lx 架设

OT A   署服 器为   83 00/9 70 0   手机 动部 对应   OS   本的程

 

7.1 为不同 OS 的手机 8 310/ 89 10 别打 应用程序 jad /alx

在开发工 中, 不同 OS 版本的 机, OS 4.5 8300 OS 5.0 9700 机分别 包是 轻而易 的事

首先在   e cli p s e   选择 选择菜单   Pro j e ct   - >   P rop e rtie s 边选择   J av a   Build   Pa th ,右边 向栏目

选择第 Lib rarie s 你可 以看到 目当 配置的 Buil d 环境设置 哪个 OS 版本。 J RE Sy s te m Lib rary [ Black Be rry JR E 5.0.0 ] ”, 择“ Ed it ”按 ,在对 Alte rn at e J RE BlackBe rry

J RE   4.5.0 保存。


 

 

 

 

BlackBerry 用户界面开发实例(二)_第5张图片  

 

 

 

 

 

 

 

接下来选 菜单   Pro je ct   - >   BlackBe rry   - >   P ack ag e   P ro jec t (s ) 很快 以在 目的   d e liv e rab le s  

录下面   4.5.0   子目录, 里面是   p ack age   好的   co d   二进制运 文件 jad   等文 件。现 你可以

OT A   式无线 部署 个应 到手机 面了 或者 使用   ja v alo ad e r   行安装   cod   文件到 机上。

 

BlackBerry 用户界面开发实例(二)_第6张图片  

如果你想 用户 以在 脑上面 过黑 桌面 安装软 给手 ,那 需要编辑

BlackBe rry _ App _ D e s cripto r.x m l ,在 二个 Buil d 里面,勾上 Ge n e rate .a lx fi le ,然

  p ack age   即可生成   a l x   文件。


7.2 架设 O T A 署服 器为 8300 /9 700 机分 程序

开发人 教程 - RIM 人员教 A70 如何 分发应 中对 OT A 服务 详细的 述。 里就 明一下。

首先安装   ap ach e   h tt p   se r v e r   2.0 编辑   con f / m i me .type s   ,在 后加 下面 行,然 重新启

  ap ach e   服务

app lic at ion /ja v a - arch i v e                          jar app lic at ion /v nd .rim .cod   cod text/v nd .s un .j2 me .ap p - d es cri p to r     jad

 

 

 

 

 

然后把 BlackB e rry 项目 d e li ve rab le s 录下 4.5.0 5.0.0 个子 录连同文 件拷贝到 ap ach e h td ocs 目录 面,在 h td ocs 目录下 创建 个包 两个不同 jad 接的 h tml 文件 在,用 可以 黑莓 83 00 或者 9700 手机 或者是手 机模拟 通过 MD S 拟器 )访问该 h tm l ,进 而选择 同的 jad OT A 方式 线下 安装 用了。

 

 

BlackBerry 用户界面开发实例(二)_第7张图片

 

7.3   架设   O T A   署服 器为   8300 /9 700   机自 部署   OS   的程序

 

上一节中 通过 ap ach e w e b 服务器 h tml 页面 布手 程序, 要最 用户 浏览器 面上手 工选择 机型 / 版本, 后点 安装 企业用言用 户体 友好。 我们希望 企业 户使 8 300 访问 h ttp :/ /1 92.16 8. 1.102: 8080 / U ISa m p le .ja d 时候, 务器可 以自动 把对 4.5. 0 /U ISa m p le .ja d 4.5 .0/U I Sampl e . co d 等文件分 机;而当 企业用 使用


9700 机访问 h ttp :/ / 192.1 68 .1.102: 8080 / U ISa m p le .ja d 服务器 以自 地把 应的

5.0.0 /U I Sampl e .ja d 5.0.0 /U I Sample . cod 等文 分发给手 机。

 

幸运的是 黑莓 机会 备型 / 版本等 息通过 h tt p 请求 传递给 Web 服务 器。比如 8 300 机传递给 服务器的 h tt p h e ad e r us e r - a ge n t 的值为

BlackBe rry 8 300/ 4.5.0.4 4   Pro f i le /MIDP - 2.0 Con f igurat ion /C L DC - 1 .1 Vend orID/ - 1 9700   手机传 给服务

器的   h tt p   h e ad e r   u se r - a ge n t 的值为

BlackBe rry 9 700/ 5.0.0.3 34 Pro f ile / MIDP - 2.1 Conf igurat ion /C LDC- 1.1 Vend orID/ - 1 。有了 u se r - agent 息, Web 务器 可以了解 客户端 备的能力

 

T om cat J 2E E 服务 上面, 可以 Se r v l e t A PI re qu es t.g e t H e ad e r ( "us e r - a ge n t" ) 得上 息,然 自动 到对 jad /ja r/cod 文件发 户端。 服务器端 码的 作, 人已经 了很 ,我 稍微改就 可以在 J 2E E 器上面 动地 同型号 莓手 分发 程序 件了 代码说 参考 Su n M IDP Pro v i s ion in g With Serv l e ts (见 录)。

我们为黑 手机对   Su n   网站提供 了如

首先修改 p ro v i s ion e r.p ro p s 文件, 8300 970 0 应的不 目录 面的 U I Sam p le 文件 ( 相应 的,要把 BlackBe rry 项目 de liv e rab l e s 目录 两个子目 4.5.0 5. 0.0 里面的文 件拷贝到 J 2E E

WAR   根目 下面 )

 

device[BlackBerry8300]=BlackBerry8300

device[BlackBerry9700]=BlackBerry9700

BlackBerry8300[UISample.jad]=4.5.0/UISample.jad

BlackBerry8300[UISample.jar]=4.5.0/UISample .jar

BlackBerry8300[UISample.cod]=4.5.0/UISample.cod

 

BlackBerry9700[UISample.jad]=5.0.0/UISample.jad BlackBerry9700[UISample.jar]=5.0.0/UISample.jar BlackBerry9700[UISample.cod]=5.0.0/UISample.cod

 

 

然后修改 Pro v is ion e r.jav a 代码, cod 后缀的 MIME 定义 原有 码已 jad jar

MIME   定义

 

// The Bl ackBerr y COD e xte nsio n

priv at e s t ati c fi na l St ri ng COD_ E XT = " .co d";

// The Bl ackBer r y COD M IME ty pe - J i an g

private s tatic final S tring COD_MIME = " a pplicat i on/vnd.ri m.c od";

 

 

  streamFile(file,   response ) 方法中加入     COD   MIME 类型 ,告诉 户端浏

览器将 发送 cod 及对应 MIME 型。

 

 

i f ( f ile .g et P at h() .e nd sWit h( J AD_ E XT ) ) re spo nse .s et Co nte nt T y pe ( J AD_M I M E ) ;

i f ( f ile .g et P at h() .e nd sWit h( J AR_ E XT ) ) re spo nse .se t Co nte nt T y pe ( J AR_M IME ) ;

i f ( f ile. g et Pa t h ().endsWith( COD_ EXT )) response. s etContent T yp e ( COD_MIME );

 

 

  d oGe t() 法的 前面 知手机 览器 代理 (比如   Black Be rry   MD S   U RL   要做任

  cach e  


 

 

re spo nse .se t He ader( "C ac he -C o ntrol ", "no - st ore "); //H T T P 1.1

re spo nse .se t He ader( "P r agm a" ,"no -c ac he "); //HT T P 1. 0

re spo nse .se t Date He ade r ( "E xpire s", 0); //preve nt s c ac hi ng a t t he p ro xy s erve r

 

现在我们 这个 J 2E E WAR 包部署到 T om cat 服务器上 面,不 手机 过一个 U RL 就可以 装对应 的不同 本的 机程 这大大 高了 户体 低了管 员维 的负

 

 

8 后记

经过以 整个 发部 从环 搭建 代码 模拟器 试, 步跟 ,中文模 拟器配 置,到 态和 态自 O T A 们可 把这 典型的 动办 审批 的应用 序部署 到客户 机终 上了。

 

 

相信读 看完 文以 自己 手在 莓手 上面开 移动 公应 您回到 司后, 可以从 研企 领导 人员需 及时 效处 务流 手, 上开 / / 发企业 的移动 公应

 

 

 

注:

在黑莓 机平 上, BlackBe rry UI API (ne t.ri m . d ev ic e .ap i.u i )/ MI DP U I API

(jav ax .m icroedition .lcdu i )/ Wid ge t (HT ML, CSS, 以及 J a v aS cript) 等三种 A PI 应用 序的用 界面, 其中前 两种是 J av a API Wid ge t Web U I API


 

常用资 链接

 

1 BlackBe rry 开发 中文

 

http: / /cn.blackb err y .com/ dev elo p er s /

 

2   即刻 始了解   B lackBe r ry   开发

 

h tt p : / / cn.b lackb erry.c o m/ d ev el o p ers / st arted /

 

3 开发 员教程 - RIM 开发 人员教程

http: / /cn.blackb err y .com/ dev elo p er s /r e so urce s/t u t o rials. j sp #t ab _t ab _ d e v elo pm e nt

 

4   BlackB e rry   开发 英文

 

http: / /ww w. b lack b e rry.c o m / d evelo p ers

 

5   BlackBe rry   Supp ort   Com m u n ity   Fo ru m s   论坛 好的同 值得 潜水 提问

 

h ttp :/ /s upp ortforu ms .b lackb e rry .com/ri m /

 

6 BlackBe rry 文档库

http: / / w w w. b lack b err y .c o m / bt s c

 

 

本文参 链接:

1 A 70 部署 分发应用 程序

h ttp :/ /n a.b lackb e rry .com/dev e lop e rs /re s ou r ce s /A7 0_ H o w _ to _ De p loy _ and _ D is tribu te _ A pp lic at ion s_ V1.p

df

2 MIDP Pro v i s ion in g With Ser v le t s http: / /d ev elop ers . s un.co m /mobil i ty/ m idp/ttip s/ p r o v i sio n i n g/in d ex. h tml

3 Go o gle 搜索

例如,使 G oogl e 搜索 b la ckb e rry .com 面关于 Li s tFi e ld 如何设 背景 的讨 搜索   Lis tFi e ld b ack groun d si t e :bla ckb e rry .co m

 

 

 

 
 

 

 

BlackBerry SDK下载

 

  • BlackBerry Java Plug-in for Eclipse v1.1
  • Java Plug-in for Eclipse Update Site
  • BlackBerry Web Plug-in v2.0
  • BlackBerry Widget SDK v1.0
  • BlackBerry Theme Studio v5.0
  • Plazmic Content Developer’s Kit v4.7
  • BlackBerry smartphone simulators
  •  

    相关链接:

    BlackBerry 用户界面开发实例(一)

    BlackBerry 用户界面开发实例(二)

    你可能感兴趣的:(eclipse,Servlets,服务器,手机,BlackBerry,黑莓)