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();

}

这些方法就可以重置空间的内容。

 

 

 

 

 

转载于:https://www.cnblogs.com/linvaluable/archive/2013/03/06/2921447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值