如何自定义一个自己的UI组件?
创建一个自定义UI,需要继承自现有的组件或者直接继承Field类,通常我们必须实现layout()和paint()方法用于显示想要的UI界面。
1. layout()方法可在手机屏幕上实现一个具有宽度和高度的区域,调用setExtent(width, height);实现。getPreferredWidth()、getPreferredHeight()告诉容器出现在屏幕上合适的高度和宽度
public int getPreferredWidth() {
return this.getScreen().getWidth() / 7;
}
/**
* Gets the preferred height of the button.
*/
public int getPreferredHeight() {
return _labelHeight;
}
protected void layout(int width, int height) {
// Calc width.
width = getPreferredWidth();
// Calc height.
height =getPreferredHeight();
// Set dimensions.
setExtent(width, height);
}
2. paint()方法使用Graphics对象绘制UI,drawLine, drawRect,drawText
protected void paint(Graphics graphics) {
// graphics.setColor(0xDDDDDD);
// graphics.fillRect( 0, 0, getWidth(), getHeight() );
int textX, textY, textWidth;
int w = getWidth();
if (_isBorder == 0) {
graphics.drawRect(0, 0, w, getHeight());
}
textX = 4;
textY = 2;
textWidth = w - 6;
graphics.drawText(_label, textX, textY, (int) (getStyle()
& DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK), textWidth);
}
3. 如果要处理键盘和滚轮事件可以实现keyChar()/trackwheelClick()方法
4. 如果在控件获取到焦点,实现onFocus()方法,可查看黑莓自带的例子
贴上完整的代码:CalenderField.java
package org.bulktree.calender;
import net.rim.device.api.ui.*;
class CalenderField extends Field implements DrawStyle {
public static final int RECTANGLE = 1;
public static final int TRIANGLE = 2;
public static final int OCTAGON = 3;
private String _label;
private Font _font;
private int _labelHeight;
private int _isBorder = 0;//是否有边框0有1无
public CalenderField(String label, int shape, long style) {
super(style);
_label = label;
_font = getFont();
_labelHeight = _font.getHeight();
}
public CalenderField(String lable, int shape, long style, int isBorder) {
super(style);
_label = lable;
_font = getFont();
_labelHeight = _font.getHeight();
_isBorder = isBorder;
}
/**
* Gets the preferred width of the button.
*/
public int getPreferredWidth() {
return this.getScreen().getWidth() / 7;
}
/**
* Gets the preferred height of the button.
*/
public int getPreferredHeight() {
return _labelHeight;
}
protected void layout(int width, int height) {
// Calc width.
width = getPreferredWidth();
// Calc height.
height =getPreferredHeight();
// Set dimensions.
setExtent(width, height);
}
protected void paint(Graphics graphics) {
// graphics.setColor(0xDDDDDD);
// graphics.fillRect( 0, 0, getWidth(), getHeight() );
int textX, textY, textWidth;
int w = getWidth();
if (_isBorder == 0) {
graphics.drawRect(0, 0, w, getHeight());
}
textX = 4;
textY = 2;
textWidth = w - 6;
graphics.drawText(_label, textX, textY, (int) (getStyle()
& DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK), textWidth);
}
}
posted on 2011-01-20 15:45
凌晨风 阅读(1822)
评论(1) 编辑 收藏 所属分类:
BlackBerry