如何自定义一个自己的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);
}
}
相关资源:对日软件外包开发质量探讨.pdf-互联 文档类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!