我正在尝试在水平管理器的右侧显示图像,该图像有2个labelfields,当我添加图像时,labelfield显示的数据为vainshed,只有图像显示在右侧。我使用的是自定义位图字段,如下所示:
Public class screen{
HorizontalFieldManager horizontalFieldManager_left1 = new HorizontalFieldManager() {
protected boolean keyChar(char key, int status, int time) {
Field field = getFieldWithFocus();
Dialog.alert("here 1");
return super.keyChar(key, status, time);
}
};
final ImageButtonField alarmBitmapField = new ImageButtonField("",
Field.FOCUSABLE, "ringtone.png", "ringtone.png", 0x9cbe95);
System.out
.println("width is ::" + alarmBitmapField.getPreferredWidth());
alarmBitmapField.setMargin(0, 0, 0, Display.getWidth()
- alarmBitmapField.getPreferredWidth());
horizontalFieldManager_left1.add(alarmBitmapField);
horizontalFieldManager_left1.add(time1);
horizontalFieldManager_left1.add(min1);
horizontalFieldManager_left1.add(new LabelField(" "));
horizontalFieldManager_left1.add(desc1);
vfm.add(horizontalFieldManager_left1);
}
自定义类
public class ImageButtonField extends Field {
private String _label;
private int _labelHeight;
private int _labelWidth;
private Font _font;
private Bitmap _currentPicture;
private Bitmap _onPicture;
private Bitmap _offPicture;
int color;
public ImageButtonField(String text, long style, String img,
String img_hvr, int color) {
super(style);
_offPicture = Bitmap.getBitmapResource(img);
_onPicture = Bitmap.getBitmapResource(img_hvr);
_font = getFont();
_label = text;
_labelHeight = _onPicture.getHeight();
_labelWidth = _onPicture.getWidth();
this.color = color;
_currentPicture = _offPicture;
}
/**
* @return The text on the button
*/
String getText() {
return _label;
}
/**
* Field implementation.
*
* @see net.rim.device.api.ui.Field#getPreferredHeight()
*/
public int getPreferredHeight() {
return _labelHeight;
}
/**
* Field implementation.
*
* @see net.rim.device.api.ui.Field#getPreferredWidth()
*/
public int getPreferredWidth() {
return _labelWidth;
}
/**
* Field implementation. Changes the picture when focus is gained.
*
* @see net.rim.device.api.ui.Field#onFocus(int)
*/
protected void onFocus(int direction) {
_currentPicture = _onPicture;
invalidate();
}
/**
* Field implementation. Changes picture back when focus is lost.
*
* @see net.rim.device.api.ui.Field#onUnfocus()
*/
protected void onUnfocus() {
_currentPicture = _offPicture;
invalidate();
}
/**
* Field implementation.
*
* @see net.rim.device.api.ui.Field#drawFocus(Graphics, boolean)
*/
protected void drawFocus(Graphics graphics, boolean on) {
// Do nothing
}
/**
* Field implementation.
*
* @see net.rim.device.api.ui.Field#layout(int, int)
*/
protected void layout(int width, int height) {
setExtent(Math.min(width, getPreferredWidth()),
Math.min(height, getPreferredHeight()));
}
/**
* Field implementation.
*
* @see net.rim.device.api.ui.Field#paint(Graphics)
*/
protected void paint(Graphics graphics) {
// First draw the background colour and picture
graphics.setColor(this.color);
graphics.fillRect(0, 0, getWidth(), getHeight());
graphics.drawBitmap(0, 0, getWidth(), getHeight(), _currentPicture, 0,
0);
// Then draw the text
graphics.setColor(Color.BLACK);
graphics.setFont(_font);
graphics.drawText(
_label,
4,
2,
(int) (getStyle() & DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK),
getWidth() - 6);
}
/**
* Overridden so that the Event Dispatch thread can catch this event instead
* of having it be caught here..
*
* @see net.rim.device.api.ui.Field#navigationClick(int, int)
*/
protected boolean navigationClick(int status, int time) {
fieldChangeNotify(1);
return true;
}
}
答案 0 :(得分:1)
您可以使用GridFieldManager解决您的问题,如下所述: Search bar on top of the mainscreen blackberry
完整解释here。