每周一技:HyperLinkField
这是每周一技的第二篇了。
前一篇介绍了从BES读取contacts的技术以及遇到相关问题的解决方案(via 每周一技:从BES服务器上lookup联系人)。
本篇将介绍如何编写自定义的超级链接控件。
背景
在很多情况下,我们都会遇见超级连接的显示,遗憾的是在Blackberry没有提供类似于HyperLinkField的组件,这给我们增加了很多麻烦,如果能够解决该问题,将会是一个不错的选择。
分析
既然Blackberry API没有,我们自己可以写一个该Field,在这里,我们将之命名为HyperLinkField,以符合Blackberry API命名的规则。
实现
先看几张效果图:
图1,当focus在其他field时HyperLinkField的样式.
图2 当光标移到该field上时,颜色会变蓝,当然你也可以更改颜色。
图3,当点击该Field时,
图4,其菜单如下
该Get Page就会打开连接。
在编写代码需要注意一下几个地方:
参数的设置
Layout的处理
如何paint
菜单的处理
点击该field如何处理
下面给出部分重要的代码。
package com.taigoo.blackberry.weekskills.hyperlink;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.ContextMenu;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.XYRect;
import net.rim.device.api.system.Display;
import net.rim.blackberry.api.browser.*;
public class HyperLinkField extends Field {
private String _displayName ;
private String _url;
private Font _font;
private MenuItem _openMenuItem;
/**
[...]
Confach发表于 July 14, 2009 7:35 pm | 留言 |每周一技
BlackBerry 应用程序开发者指南 第二卷:高级–第5章 BlackBerry浏览器
5
第5章 BlackBerry浏览器
浏览器API
在浏览器显示Web内容
在一个浏览器域里显示Web内容
支持附加的MIME类型
注册一个HTTP过滤器
浏览器API
API名和包
描述
浏览器应用程序API(net.rim.blackberry.api.browser)
通过调用Blackberry浏览器,API允许应用程序显示web内容,包括支持的图片格式,HTML以及WML页面.也允许应用程序提供HTTP请求的一个Referrer,HTTP头,以及提交的内容.为获得更多信息,参看51页的”在浏览器显示Web内容”.
浏览器域API
(net.rim.blackberry.api.browser.field)
此API允许一个应用程序获取web内容在一个浏览器域里的显示,此域包含在应用程序UI里.也允许应用程序配置浏览器域的表现形式,例如去除滚动条,或者指定仅显示屏幕一部分的浏览器域.
浏览器页面API(net.rim.blackberry.api.browser.plugin)
此API允许应用程序支持附加的MIME类型.当BlackBerry启动时,注册一个提交提供者,所有后发的浏览器对话将支持附加的MIME类型.为获取更多信息,参看66页的”支持附加的MIME类型”.
HTTP过滤器API
(net.rim.device.api.io.http)
API允许应用程序向浏览器注册一个或多个URL的提供者.为获取更多信息,参看71页的”注册一个HTTP过滤器”.
在浏览器里显示Web内容
为了在浏览器里显示web内容,使用浏览器应用程序API(net.rim.blackberry.api.browser).
获取一个浏览器对话(Session)
为了获取一个缺省的BrowserSession对象,调用静态方法Browser.getDefaultSession().本对象允许你访问正在BlackBerry设备上运行的浏览器.
为了新增一个约会,调用EventList.importEvent(). 注:获取缺省的对话会覆写任何BlackBerry设备上已经打开的对话.
为获取一个不同的对话,调用getSession().此方法根据它的唯一ID(UID)获取一个浏览器配置服务记录.为获得更多信息,参见113页的”服务定制API”.
请求一个Web页面
为请求一个Web页面,调用BrowserSession.displayPage()方法.下面的实例使用了仅接受一个URL的displayPage()方法.为指定一个referrer,HTTP头,以及提交的数据,使用接受这些附加信息的方法.
代码实例
下面来自Restaurants.java实例的引用创建了一个菜单,此菜单会在浏览器中显示一个Web页面.
private MenuItem browserItem = new MenuItem(
_resources.getString(MENUITEM_BROWSER), 110, 12) {
public void run() {
synchronized(store) {
String websiteUrl = websitefield.getText();
if (websiteUrl.length == 0) {
Dialog.alert(_resources.getString(ALERT_NO_WEBSITE));
}
else {
BrowserSession visit = Browser.getDefaultSession();
visit.displayPage(websiteUrl);
}
}
}
};
在浏览器域显示Web内容
为了在应用程序UI里包含一个浏览器域,使用浏览器域API (net.rim.device.api.browser.field).浏览器呈现(rendering)库为域处理web内容的描绘,然后返回一个BrowserField-在此域URL内容得到描绘-到你的应用程序显示. 注:用来打开一个浏览器域的浏览器对话独立于BlackBerry设备上缺省的浏览器对话. 任何打开的浏览器对话则不受影响.
RenderingApplication接口定义了一个描绘对话所需要的回调功能来帮助处理URL资源, RenderingApplication接口的实现在一个浏览器域里显示web内容.
为呈现创建一个独立的线程
当应用程序获取和显示浏览器域时,为阻止应用程序挂起,在一个独立线程上完成这些操作.
class CreationThread extends [...]
Confach发表于 April 28, 2008 12:28 pm | 留言 |新闻
最新留言
- 高超:还有我按照http://www.52blackberry.com/thread-291671-1-1.html这个网站的方法实验过,还是不可以,不知道哪里做的不对
- 高超:说实话我没有看懂说的是什么,但是我很想像楼主那样使用SB的应用,我想楼主详细的告诉我应该怎么操作才能使用。谢谢 另:我没有使用移动的SB,那又点贵,不知道楼主的方法是不是需要移动推入,我使用的是blackberry的8520,支持WIFI 等待回复谢谢
- nio:ESS和MDS设置完毕之后,还是无法接收邮件,请较如下: MDS设置中的 Email.userId是写邮箱登陆用户名? Email.address需要修改么? Email.personal需要修改么? ESS设置中的 Email.personal跟MDS中的Email.personal有关系吗? Email.address跟MDS中的Email.address有关系吗? 以上两项应该设置成什么? ps:我用的是126的邮箱,用本地的outlook没有问题~
- 涂鸦:姜还是老的辣。
- Kirsten30MG:A lot of professors demand to examine the writing technique, hence, people have to choose dissertation service to buy free dissertation. In such way people show academic level. And as well you should get thesis.
