当前位置: 首页 > 科技观察

BlackBerry应用程序开发人员UIAPI指南:显示UI组件

时间:2023-03-12 09:59:59 科技观察

当您为BlackBerry设备编写应用程序时,请使用以下两组UIAPI之一:MIDPUIAPI(javax.microedition.lcdui包)BlackBerryUIAPI(net.rim.device.api.ui包)如果您正在编写要在任何MIDP兼容设备上运行的应用程序,请使用MIDPUIAPI。如果您编写的应用程序仅在BlackBerry设备上运行,请使用BlackBerryUIAPI。BlackBerryAPI提供对BlackBerry设备特定功能的访问,还允许更复杂的UI布局和交互。(注意:不要在同一个程序中同时使用MIDPUIAPI和BlackBerryUIAPI,否则会抛出异常。在应用程序中,UI框架只支持一种UI对象。)显示UI组件DisplayScreen(Screen)UI的主要结构是Screen。一个应用程序一次只能显示一个屏幕。(注意:不要使用Screen对象来输入文字。Screen对象没有明确实现这个功能,需要复杂的输入法,比如国际化的键盘和7100系列设备。要实现不同输入法的无缝集成,扩展Field或者它的任何子类。)显示堆栈(Stack)Screen对象被维护在一组有序的Screen显示堆栈中。堆栈顶部的屏幕对象是显示给用户的活动屏幕。当应用程序显示Screen时,它会将Screen推到堆栈的顶部。当一个Screen关闭时,Screen从堆栈中移除,并显示堆栈中的下一个Screen,必要时重新绘制它。(注:每个Screen只在栈上出现一次,如果同一个Screen被压入栈不止一次,VM会抛出运行时异常。当用户完成与Screen的交互后,应用程序必须从Screen中移除Screen堆栈。这样内存就不用再用了。不要同时使用多个Screen,因为每个Screen使用一个独立的线程。)屏幕类型在大多数情况下,创建屏幕的最有效方法是创建一个扩展屏幕或其子类之一的类,即FullScreen或MainScreen。响应用户交互BlackBerryAPI提供了一个类似于Java标准版本的事件监听框架。特别是,2个侦听器接口使程序能够接收和响应用户交互:TrackWheelListener和KeyboardListener。Screen类及其子类都实现了这些方法。提供屏幕导航(navigation)BlackBerry应用程序为用户提供一个菜单来完成操作。避免使用按钮(Button)或其他占用屏幕空间的UI组件。(注意:按滚轮访问菜单。)创建全屏或屏幕时,在构造函数中指定DEFAULT_MENU和DEFAULT_CLOSE参数以提供默认导航。全屏fullScreen=newFullScreen(DEFAULT_MENU|DEFAULT_CLOSE);创建MainScreen时,会自动提供默认导航。添加菜单项会创建MenuItem对象。MenuItem构造函数接受以下3个参数:run()定义用户单击菜单项时发生的操作的实现。如果您不使用本机资源,请覆盖toString()方法以指定菜单项的名称。要向应用程序中的字段添加上下文菜单,请调用getLeafFieldWithFocus(),然后调用getContextMenu(),其返回值决定哪个Field接收makeMenu()中的自定义菜单项。添加您自己的菜单项时,明确定义一个关闭菜单项。要将菜单项添加到Screen,请覆盖Screen.makeMenu()方法:如果您扩展Screen或其任何子类,则默认的TrackwheelListener实现会在用户单击滚轮时调用makeMenu()。如果不扩展Screen,则实现TrackwheelListener。具体来说,trackwheelClick()的实现会创建一个新菜单,添加菜单项并在屏幕上显示菜单。(注意:为了创建菜单项以提供额外的功能,请扩展MenuItem类。)#p#DisplaydialogPopupScreen类使用其子类Dialog和Status提供创建对话框和状态Screen的特性。弹出屏幕不会被推入显示堆栈。要显示弹出屏幕,请调用Dialog.ask(int)或Status.show()。要控制对话框的布局,请使用DialogFieldManager对象。要显示对话框,请使用以下参数之一调用Dialog.ask():要为对话框指定默认响应,请使用接受defaultChoice作为参数的Dialog.ask()版本。显示状态消息调用Status.Show()以显示状态消息。默认情况下,状态屏幕会保持其屏幕亮起2秒钟。Status.show("状态屏幕信息");请参阅Status.Show()版本的API参考,它允许您指定其他参数,例如不同的图标或保持状态对话框可见的时间。您可以创建模态状态对话框(要求用户取消它们)和定时状态对话框(在指定时间后自动取消)。#p#显示域(Field)所有的UI组件都以管理器中包含的矩形域的形式显示。Field的大小取决于其布局要求。管理器为它们包含的字段提供滚动(条)。BlackBerryJDE在net.rim.device.api.ui.component包中提供了一个预建界面控件和组件库。在大多数情况下,您可以使用这些对象来构建UI应用程序。要创建特定的字段控件(例如包含多个元素的文本字段),请扩展Field类或其任何子类以创建您自己的自定义类型。(注意:有关给定字段类的有效受支持格式的更多信息,请参阅API参考。如果使用不受支持的格式实例化Field,则会抛出IllegalArgumentException。)BitmapFieldBitmapField包含一个bitmap。BitmapField在使用Graphics对象绘制时使用。要修改字段的内容,请调用BitmapField的绘制方法。有4个预定义位图:◆Bitmap.INFORMATION◆Bitmap.QUESTION◆Bitmap.EXCLAMATION◆Bitmap.HOURGLASS要使用原始.gif或.png作为位图,请调用getBitmapResource()。(注意:二进制资源大小,例如.png文件,不能超过63,000字节。)ButtonFieldButtonField包含用户选择以完成操作的按钮。使用ButtonField创建将交互扩展到菜单之外的界面。(代码插入图8)要向按钮添加功能,请扩展ButtonField并覆盖trackwheelClick()方法,以便它执行操作而不是调用菜单。要在用户单击按钮时接收消息,请使用FieldChangeListener对象。选择字段选择字段类似于下拉列表。有两种类型的选择字段:包含整数的字段和包含可以转换为字符串的对象的字段。您还可以将一组选项显示为复选框或单选按钮。要从ChoiceField中选择一个值,用户可以执行以下操作:◆单击该字段并按Space键。◆按住Alt键,滚动滚轮。◆打开菜单并选择更改选项。OptionField允许用户从列表中选择项目。要允许用户从选择列表中选择多个项目,请使用CheckBoxField。要允许用户从选择列表中仅选择一项,请使用RadioButtonField。日期字段在您的应用程序中,日期字段显示当前日期和时间。创建DateField时,调用System.currentTimeMillis()获取当前时间。默认情况下,日期字段是可编辑的。要创建用户无法编辑的日期字段,请在其构造函数中指定Field.READONLY参数。将为可编辑的日期字段提供默认的更改选项菜单项。编辑字段EditField允许用户在此字段中输入文本。AutoTextEditField、EditField和PasswordEditField都扩展了BasicEditField。(注:net.rim.device.api.ui.component.TextField类继承了Field类,是抽象的,实例化它的子类,比如RichTextField或者EditField,就是创建一个UIField,显示文本或者允许用户输入文本。)您可以将以下过滤器项目(过滤器)应用于编辑字段。GaugeFieldGauge允许您创建值的可视化表示。GaugeField显示一个进度条或允许用户选择一个数字。您可以在其前面加上标签并显示仪表的当前值。例如,组合GaugeField和NumericChoiceField来创建用户做出的数字选择的图形表示。要创建交互式GaugeField,请使用Field.FOCUSABLE和Field.EDITABLE样式实例化该字段。Label(标签)和Separator(分隔)FieldLabelField允许您向屏幕添加文本标签。LabelField是可读的。默认情况下,它无法获得焦点。大多数应用程序使用LabelField在其第一个屏幕上显示静态标题。SeparatorField是一条横跨屏幕宽度的静态水平线。使用SeparatorField对屏幕上的相关内容和菜单进行分组。默认情况下,MainScreen在标题后显示分隔线。ListFieldList允许您创建一个子项目录,用户可以在其中滚动并选择单个或多个条目。BlackBerry地址簿是List对象的一个??示例。您不能直接向字段条目添加内容。ListField的ListFieldCallback和TreeField的TreeFieldCallback的实现绘制字段。TreeFieldTreeField包含父节点和子节点并显示它们之间的文件夹或树关系(例如文档或信息文件夹)。默认情况下所有节点都是可见的。要指示文件夹是否可折叠,请调用TreeField对象的setExpand()方法。图标显示在包含子节点的每个节点的一侧,以指示该节点是打开还是折叠。TreeFieldCallback的实现将字段添加到树中。[编辑推荐]在BlackBerry设备上使用Java和应用程序控制BlackBerryApplicationDeveloper'sGuideBasicsAppendix.alxFilesBlackBerryApplicationDeveloper'sGuideOptionsAPIBlackBerryApplicationDeveloper'sGuidePIMAPIBlackBerryApplicationDeveloper'sGuideMailAPI