如何自定義一個(gè)自己的UI組件?
創(chuàng)建一個(gè)自定義UI,需要繼承自現(xiàn)有的組件或者直接繼承Field類,通常我們必須實(shí)現(xiàn)layout()和paint()方法用于顯示想要的UI界面。
1. layout()方法可在手機(jī)屏幕上實(shí)現(xiàn)一個(gè)具有寬度和高度的區(qū)域,調(diào)用setExtent(width, height);實(shí)現(xiàn)。getPreferredWidth()、getPreferredHeight()告訴容器出現(xiàn)在屏幕上合適的高度和寬度
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對(duì)象繪制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. 如果要處理鍵盤和滾輪事件可以實(shí)現(xiàn)keyChar()/trackwheelClick()方法
4. 如果在控件獲取到焦點(diǎn),實(shí)現(xiàn)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無(wú)
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
凌晨風(fēng) 閱讀(1830)
評(píng)論(1) 編輯 收藏 所屬分類:
BlackBerry