BlackBerry 开发笔记入门 控件简介
1.screem
2.layout
3.event
一、Screem
BlackBerry应用是由一个一个页面(screem)构成,其中有一个入口页面,即应用程序的主页面Mainapplication.java文件定义的类。每个页面由各自的页面布局控件和功能控件组成,为各个页面的layout。
1)应用中打开一个页面screem,即页面创建后(new screem)加入到UIApplication的堆栈中,通过push加入,这样该页面就能显示出来,这些页面类必须继承于net.rim.device.api.ui.container.MainScreen。每个页面的关闭可以通过popup进行处理,其实当用户点击返回按钮时即关闭了该页面。如:
UiApplication.getUiApplication().pushScreen(srnNew);
UiApplication.getUiApplication().popupScreen(srnNew);
或者直接UiApplication.getUiApplication().popupScreen();
2)页面layout中的控件的添加,删除以及控件的数据处理都必须要在UI主线程当中进行。程序的主线程通过UIApplication获取,获取主线程后开启一个Runnable就可以在UI主线程中执行处理,也可以进行延时或重复执行。如:
UiApplication.getApplication().invokeLater(new Runnable(){
public void run(){/*处理代码*/}
}, 6000,false);
3)有些页面可能需要实时从服务端获取数据,然后把数据绑定到页面当中,调用API获取数据可能比较慢,如果放在主线程中执行,就会使整个程序卡住,并且手机系统也会卡住,直到数据获取完毕和页面布局创建完成后才正常。这是就需要开启一个线程去获取数据,然后再回到主线程创建页面;对于页面控件的处理必须回到主线程中才能进行,如果新创建的控件要加入的父级容器(VerticalFieldManager、HorizontalFieldManager)还没有添加到页面的layout中,还能在Thread中处理。开启新的行程如下:
new Thread(){public void run(){/*处理代码*/}
}.start();
要回到UI主线程时,可以直接在处理代码中加入就行了。
4)当前页面的事件,这些事件的处理方法都是Screem父级类的方法,只要重写就可以了。
手机的back事件
public boolean onClose(){
return false; //true关闭当前页面,false阻止back事件,即不管闭
}
当前页面获取焦点或失去焦点为
protected void onFocusNotify(boolean focus){}
还有其他的页面的事件都可以在其中找到。
二、页面布局控件
VerticalFieldManager垂直线性布局
HorizontalFieldManager水平线性布局
TextField文本输入控件
LabelField文本显示控件
RadioBoxField单选按钮
CheckBoxField多选按钮
ChomBoxField下拉控件
ImageField图片控件
ButtonField按钮控件
Dialog弹出框
PopupScreem弹出页面
1)控件的事件
这些控件都不可以直接设置单击事件,要实现单击事件,可以继承上面控件,自定义事件;
A)单击事件
protected void enterClickingMode(){
bnInClick = true;
invalidate();
Application.getApplication().invokeLater(new Runnable(){
public void run(){
try{
Thread.sleep(40);
} catch (InterruptedException ex){
}
bnInClick = false;
invalidate();
onClick();
}
});
}
protectedvoid onClick(){}
只要在创建该对象时重写onClick即可;
B)获取焦点和失去焦点事件
protected void onFocus(int direction){
bnInHighlight = true;
invalidate();
}
protected void onUnfocus(){
bnInHighlight = false;
invalidate();
}
同样只要在创建对象时重写这两个方法即可;如下:
ACLASS a = new ACLASS(){
protectedvoid onClick(){/*处理过程*/}
protected void onFocus(int direction){/*处理过程*/}
protected void onUnfocus(int direction){/*处理过程*/}
};
2)控件的高宽
这些控件也不能直接设置高宽,必须重写控件的sublayout方法,并在方法中就能定义控件的高宽和位置;如果是容器控件,可以定义子类控件的高宽和位置。如:
HorizontalFieldManager hor = new HorizontalFieldManager(){
protected void sublayout(int maxWidth, int maxHeight){
super.sublayout(maxWidth, maxHeight);
setExtent(newWidth, this.getHeight()); \\定义控件的高宽
Field lblOne = this.getField(0);\\获取容器中的子控件
setPositionChild(lblOne, 0, 0);\\设置子控件的位置
this.layoutChild(lblOne, width, intNewHeight);\\设置子控件的高宽
}
}
3)控件之间的间距
设置控件之间的间距可以使用方法setMargin(top,right,buttom,left),参数代表距离值对应的方向;如果要设置的距离值要小于零,必须要两个控件都要设置这个负的距离值,只设置一个控件的距离值小于零是没有效果的,如:a.setMargin(0,0,-10,0);b.setMargin(-10,0,0,0);两个控件对象要设置的方向必须是相对应的。
4)控件内的背景图和字体
要自定义控件内的图像和字体可以重写paint方法,如下:
protected void paint(Graphics graphics){
super.paint(graphics);
graphics.drawImage();
graphics.setFont(font);
graphics.drawText();
}
这些方法就可以重置空间的内容。
posted on 2013-03-06 16:30 linvaluable 阅读(171) 评论(0) 编辑 收藏 举报