如何创建定制的BlackBerry UI Field--BlackBerry 编程.pdf
《如何创建定制的BlackBerry UI Field--BlackBerry 编程.pdf》由会员分享,可在线阅读,更多相关《如何创建定制的BlackBerry UI Field--BlackBerry 编程.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 如何创建定制的如何创建定制的 BlackBerry UI Field 作者:杨江作者:杨江 http:/http:/目录目录 如何创建定制的 BlackBerry UI Field.1 目录.2 一 概述.3 二 BlackBerry UI Field.3 三 创建定制的 UI Field 的方法.3 3.1 HyperlinkButtonField.4 3.2 BitmapButtonField 和 MediaControlStyleField.8 3.3 ProgressAnimationField.10 小结.12 参考.12 http:/一一 概述概述 BlackBerry 平台为开
2、发人员提供了很多标准的 UI 组件,为程序员快速开发手机应用奠定了基础。但大量手机软件是消费类、娱乐类软件,这些软件的 UI 界面需要独特、于众不同,能抓住用户的眼球。标准的 UI 组件经常不能满足开发商和用户的独特要求,很多时候开发人员需要发挥其想象力去创造和定制出新的 UI 组件。所幸 BlackBerry 平台上面创建定制的 UI 组件是一件比较简单的事情。二二 BlackBerry UI Field 从 BlackBerry API Java doc 中我们看到,我们常用的 UI 组件,即 Field,比如文本框 ButtonField、LabelField、TextField 等等都
3、是扩展 net.rim.device.api.ui.Field 而来。更高级的 BlackBerry UI 组件,比如管理器 Manager 和窗口 Screen 也是继承 Field 类。三三 创建定制的创建定制的UI Field的方法的方法 创建自定义字段,编写一个 Field,通常至少需要实现 layout()和 paint()两个方法,以设置 Field 的宽度和高度,显示 UI 组件的界面。其他方法可选,具体列表如下:Field 是 UI 的最小单元,这个最小单元里面不能放置其他 Field。但是 Manager 类可以,Manager 类里面可以嵌套放置 Manager 类,Man
4、ager 管理 Field 在屏幕上的摆放位置。extends Field并实现相应的方法。或者是extends 现有的Field类,比如LabelField、ListField Field 在手机屏幕上显示为一个长方形的区域,有高实现 layout():调用 setExtent()方法设http:/度,宽度 置 Field 的宽度和高度。在 Field 长方形的区域中更改背景,显示图形/文字,加边框等 实现 paint():使用 Graphics 对象的drawLine,drawRect,drawText 等方法来绘制 Field Field 可以选择是否要处理和如何处理键盘/轨迹球事件,例
5、如用户按下“黑莓退出键”,你可以选择弹出对话框 Dialog,让用户确认需要退出 实现 keyChar(),trackwheelClick(),invokeAction()等方法。Field 需要告诉 Manager 它的 prefered 宽度和高度,以便 Manager 控制包含的各个 Field 的显示 override getPreferredWidth 和getPreferredHeight 方法 Field 被选中,on focus 的时候可以选择重新绘制字段。注:用户希望 Field 选中/非选中状态显示的界面不一样,比如选中的时候希望高亮度显示,加边框;没有选中就低亮度显示即可
6、。实现 drawFocus():使用 Graphics 对象setBackgroundColor()方法改变背景色,drawLine,drawRect,drawText 等方法来绘制 Field Field 可以选择是否要处理和如何处理 Focus/selected事件 实现onFocus()下面让我们通过实现一组自定义 Field 来让我们的应用程序用户界面更加丰富多彩。3.1 HyperlinkButtonField 缺省的 ButtonField 是一个有边框的长方形的按钮,按钮宽度比按钮文字长度稍宽。在某些信息处理应用中,如果 UI 界面里面按钮和操作太多,用户会觉得按钮多而信息少。为
7、什么不考虑将文字信息内容和文字相关的操作(按钮)混合显示呢?或者是用超文本链接按钮代替传统的 ButtonField 呢?http:/ 我们不必从头做一个这样的控件-extends Field 并实现 Field 接口的很多方法。我们大可以找一个和我们需要的界面相似的一个已经存在的 Field 进行扩展。下面,我们扩展 BlackBerry 平台提供的 LabelField,来实现我们的 HyperlinkButtonField,这样就不需要管基本的文字的显示功能,而只需要扩展实现如下功能:1.HyperlinkButtonField 显示的文字要有下划线,并且被选中和没有选择的字体颜色要不同
8、,背景色也不同。2.用户按下轨迹球,或者安装键盘 Enter 键,要触发 HyperlinkButtonField 关联的动作。具体实现计划:HyperlinkButtonField extends 现有的LabelField Field 在手机屏幕上显示为一个长方形的区域,有高度,宽度 不去实现了,借用LabelField的layout()显示带下划线的文字 实现 paint():修改该背景色,修改字体颜色,然后借用父类 LabelField 的 paint()方法显示文字 Field 可以选择是否要处理和如何处理键盘/轨迹球事件,例如用户按下“黑莓退出键”,你可以选择弹出对话框 Dialo
9、g,让用户确认需要退出 实现 keyChar(),trackwheelClick(),invokeAction()等方法。Field 需要告诉 Manager 它的 prefered 宽度和高度,以便 Manager 控制包含的各个 Field 的显示 override getPreferredWidth 和getPreferredHeight 方法 Field 被选中,on focus 的时候可以选择重新绘制字段。注:用户希望 Field 选中/非选中状态显示的界面不一样,比如选中的时候希望高亮度显示,加边框;没有选中就低亮度显示即可。实现 drawFocus():使用 Graphics 对
10、象setBackgroundColor()方法改变背景色,drawLine,drawRect,drawText 等方法来绘制 Field http:/ HyperlinkButtonField.java extends LabelField,通过三个color变量来记录和控制字体的颜色。实现applyFont()。设置使用带下划线的字体Font.UNDERLINED,看上去这个象一个hyper link。实现 paint()。字段的 Manager 将调用 paint(),以在某个字段区域被标记为无效时重新绘制字段。调用 graphics.setColor()来设置当 Field 在没有选择(
11、非 Focus)状态时候的字体颜色。在在修改了字体颜色参数后,调用 super.paint()也就是 LabelField.paint()方法来绘制显示这个Field。实现 drawFocus()。字段的管理器将调用 drawFocus(),以在某个字段被选中造成该区域在被标记为无效时重新绘制字段。调用 g.setBackgroundColor()来设置当 Field 在被选中(Focus)状态时的画布的背景色;调用 paint()重新画这个字段,当然 paint()里面会调用 super.paint()也就是LabelField.paint()方法来绘制显示这个 Field。protecte
12、d void paint(Graphics g)int oldColour=g.getColor();try if(g.isDrawingStyleSet(Graphics.DRAWSTYLE_FOCUS)g.setColor(_textColourFocus);else g.setColor(_textColour);super.paint(g);/修改了字体以后,调用父类LabelField的paint()来重新画指定颜色的文字 finally g.setColor(oldColour);/这里用临时变量来恢复Graphics原来的颜色 public class HyperlinkButt
13、onField extends LabelField private int _textColour;private int _textColourFocus;private int _highlightColour;private XYRect _tmpRect=new XYRect();public HyperlinkButtonField(String text,int textColour,int textColourFocus,int highlightColour,int menuOrdinal,int menuPriority,long style)super(text,Fiel
14、d.FOCUSABLE|style);/这个Field需要FOCUSABLE style以让用户能够选中 _textColour=textColour;_textColourFocus=textColourFocus;_highlightColour=highlightColour;public void applyFont()Font underlineFont=getFont().derive(Font.UNDERLINED);setFont(underlineFont);http:/ 实现 keyChar()、trackwheelClick()、invokeAction()等方法以处理用
15、户按下按钮的事件。HyperlinkButtonField的使用方法,注意要添加FieldChangeListener。HyperlinkButtonField link=new HyperlinkButtonField(“Colour Picker”,0 x0000FF,0 xFFFFFF,0 x0000FF,0,0);link.setChangeListener(new FieldChangeListener()public void fieldChanged(Field field,int context)/do something here );protected boolean ke
16、yChar(char character,int status,int time)if(character=Characters.ENTER)fieldChangeNotify(0);return true;/return ture是告诉Manager,这个事件我已经处理了,你不需要再交由别人处理 return super.keyChar(character,status,time);protected boolean trackwheelClick(int status,int time)keyChar(Characters.ENTER,status,time);return true;/r
17、eturn ture是告诉Manager,这个事件我已经处理了,你不需要再交由别人处理 protected boolean invokeAction(int action)switch(action)case ACTION_INVOKE:fieldChangeNotify(0);return true;/return ture是告诉Manager,这个事件我已经处理了,你不需要再交由别人处理 return super.invokeAction(action);protected void drawFocus(Graphics g,boolean on)getFocusRect(_tmpRect
18、);/Retrieves this fields current focus region.boolean oldDrawStyleFocus=g.isDrawingStyleSet(Graphics.DRAWSTYLE_FOCUS);int oldBackgroundColour=g.getBackgroundColor();boolean notEmpty=g.pushContext(_tmpRect.x,_tmpRect.y,_tmpRect.width,_tmpRect.height,0,0);try if(notEmpty)if(on)g.setDrawingStyle(Graphi
19、cs.DRAWSTYLE_FOCUS,true);g.setBackgroundColor(_highlightColour);g.clear();paint(g);/修改了背景色后,调用HyperlinkButtonField.paint()来重新画,以显示背景色,下划线文字 finally g.popContext();g.setBackgroundColor(oldBackgroundColour);/这里用临时变量来恢复Graphics原来的背景色 g.setDrawingStyle(Graphics.DRAWSTYLE_FOCUS,oldDrawStyleFocus);http:/
20、小结:在HyperlinkButtonField.java 代码中,我们 extends LabelField 字段,paint()方法重绘了界面;用户选择按钮的时候,我们 drawFocus()修改字体前景和背景色后再次重绘界面,同时用户click 按钮后将触发 FieldChange 事件。HyperlinkButtonField 字段的界面重绘还是相对简单的,是借用了 super.paint()方法也就是LabelField.paint()进行绘图显示文字。其他某些 Field 的定制要求就没有这么简单了,开发者需要自己调用 Graphics 对象的 drawLine、drawRect、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何创建定制的BlackBerry UI Field-BlackBerry 编程 如何 创建 定制 BlackBerry Field
限制150内