本文和大家重点学习一下Black Berry开发实现类似Lwuit的Tabbed Pane效果,Lwuit虽然有Black Berry的版本,它将所有版本的包括QWERTY、suretype、touch等的不同系统版本混合到一起,给裁剪带来很大难度。
BlackBerry开发实现类似Lwuit的TabbedPane效果
Lwuit虽然有BlackBerry开发的版本,但是对其源代码进行分析过后才发现并不能直接应用于实际项目中,它将所有版本的包括QWERTY、suretype、touch等的不同系统版本混合到一起,给裁剪带来很大难度。目前对其设计结构并不十分明确,所以源代码的裁剪过程比较混乱。虽然blackberryUI不提供类似Lwuit的分页效果,但是我们可以利用现有的API简单的模仿。等一些目前棘手的问题解决后,再慢慢研究吧。。。
两种实现方法:
1、使用屏幕Screen切换;
2、使用Graphics封装。
这两种方法都要用到滚轮的navigationMovement()事件响应函数,所以必须在需要切换的屏幕中重写这个事件。
◆实现一:使用屏幕Screen切换
思路:在UiApplication的构造函数中先将这两个屏幕压入堆栈。然后创建两个Sreen,在每个Screen中重写navigationMovement()方法。在navigationMovement()中获取UiApplication的对象,然后调用UiApplication.pushScreen()将另外一个界面压入堆栈。在另外一个界面中,调用UiApplication.popScreen()将自身弹出堆栈。
***个屏幕中的代码:
- viewplaincopytoclipboardprint?
- /*
- *滚轮滚动事件响应
- *滚轮动作:向上dy=-1,向下dy=1,向左dx=-1,向右dx=1
- *@seenet.rim.device.api.ui.Screen#navigationMovement(int,int,int,int)
- */
- protectedbooleannavigationMovement(intdx,intdy,intstatus,inttime){
- //Dialog.alert("TrackBallmoved:\r\n"+"x:"+dx+"\r\ny:"+dy);
- if(dx>0&&this.isDisplayed()){
- SillyDowntheApp=(SillyDown)this.getApplication();
- theApp.popScreen(theApp.getFirstScreen());
- returntrue;
- }
- returnfalse;
- }
- /*
- *滚轮滚动事件响应
- *滚轮动作:向上dy=-1,向下dy=1,向左dx=-1,向右dx=1
- *@seenet.rim.device.api.ui.Screen#navigationMovement(int,int,int,int)
- */
- protectedbooleannavigationMovement(intdx,intdy,intstatus,inttime){
- // Dialog.alert("TrackBallmoved:\r\n"+"x:"+dx+"\r\ny:"+dy);
- if(dx>0&&this.isDisplayed()){
- SillyDowntheApp=(SillyDown)this.getApplication();
- theApp.popScreen(theApp.getFirstScreen());
- returntrue;
- }
- returnfalse;
- }
- 第二个屏幕中的代码:
- viewplaincopytoclipboardprint?
- /*
- *滚轮滚动事件响应
- *滚轮动作:向上dy=-1,向下dy=1,向左dx=-1,向右dx=1
- *@seenet.rim.device.api.ui.Screen#navigationMovement(int,int,int,int)
- */
- protectedbooleannavigationMovement(intdx,intdy,intstatus,inttime){
- //TODOAuto-generatedmethodstub
- if(dx<0&&this.isDisplayed()){
- SillyDowntheApp=(SillyDown)this.getApplication();
- theApp.pushScreen(theApp.getFirstScreen());
- returntrue;
- }
- returnfalse;
- }
- /*
- *滚轮滚动事件响应
- *滚轮动作:向上dy=-1,向下dy=1,向左dx=-1,向右dx=1
- *@seenet.rim.device.api.ui.Screen#navigationMovement(int,int,int,int)
- */
- protectedbooleannavigationMovement(intdx,intdy,intstatus,inttime){
- //TODOAuto-generatedmethodstub
- if(dx<0&&this.isDisplayed()){
- SillyDowntheApp=(SillyDown)this.getApplication();
- theApp.pushScreen(theApp.getFirstScreen());
- returntrue;
- }
- returnfalse;
- }
点评:这种实现方式比较简单,但是效果一般。
◆实现二:使用Graphics封装
思路:使用Graphics封装一个LabelField,然后在navigationMovement()方法中重绘每个Field。
代码:(正在编写中,先做个标记)
点评:可以使用这种方法封装一个TabbedPane,界面颜色、宽度、高度、字体等都可以自行设置,界面比较华丽,但是代码比较复杂。
【编辑推荐】
- BlackBerry开发中Windows+eclipse环境配置及Helloworld
- 九步实现BlackBerry开发程序发布应用到app world
- BlackBerry开发中七步实现创建app world账号
- BlackBerry开发环境中javaloader使用详解
- 黑莓开发中黑莓手机程序访问网络能走代理服务器的三种方式