我對黑莓UI開發非常陌生,想知道有沒有什麼方法可以在位圖上添加提示框?就像HTML的一個元素的title屬性黑莓UI提示框
Q
黑莓UI提示框
0
A
回答
2
您可以使用以下TooltipScreen並以下列方式將字段添加到屏幕
add(new ButtonField(「myButton」), 「My Tooltip text」);
TooltipScreen
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.XYRect;
import net.rim.device.api.ui.container.MainScreen;
public class TooltipScreen extends MainScreen {
TooltipScreen screen = this;
boolean doRedraw = false;//prevent infinte redrawing
Vector tooltips = new Vector();//vector to hold tooltip strings
private Timer tooltipTimer = new Timer();
private TimerTask tooltipTask;
boolean alive = false;//is the tooltip alive? used to pop it after our timeout
int count = 0;//used to calculate time tooltip is displayed
//tooltip popup colours:
int backgroundColour = 0xeeeeee;
int borderColour = 0xaaaaaa;
int fontColour = 0x666666;
//the tooltip:
String tooltip;
int tooltipWidth;
int yCoord;
int xCoord;
//region parameters:
XYRect contentArea;
int contentBottom;
int contentRight;
public TooltipScreen() {
super();
//when timeout reaches 100ms*20 ie. 2seconds set alive to false and redraw screen:
tooltipTask = new TimerTask() {
public void run() {
if (alive) {
count++;
if (count == 20) {
alive = false;
invalidate();
}
}
}
};
tooltipTimer.scheduleAtFixedRate(tooltipTask, 100, 100);
}
//override add method adds an empty string to tooltip vector:
public void add(Field field) {
tooltips.addElement("");
super.add(field);
}
//custom add method for fields with tooltip: add(myField, "myTooltip");
public void add(Field field, String tooltip) {
super.add(field);
tooltips.addElement(tooltip);
}
public void setColours(int backgroundColour, int borderColour, int fontColour) {
this.backgroundColour = backgroundColour;
this.borderColour = borderColour;
this.fontColour = fontColour;
}
//reset everything when user changes focus,
//possibly needs logic to check field has actually changed (for listfields, objectchoicefields etc etc)
protected boolean navigationMovement(int dx, int dy, int status, int time) {
count = 0;
alive = true;
doRedraw = true;
return super.navigationMovement(dx, dy, status, time);
}
protected void paint(Graphics graphics) {
super.paint(graphics);
if (alive) {
Field focusField = getFieldWithFocus();
tooltip = (String) tooltips.elementAt(screen.getFieldWithFocusIndex());
//don't do anything outside the norm unless this field has a tooltip:
if (!tooltip.equals("")) {
//get the field content region, this may fall inside the field actual region/coordinates:
contentArea = focusField.getContentRect();
contentBottom = contentArea.y + contentArea.height;
contentRight = contentArea.x + contentArea.width;
//+4 to accomodate 2 pixel padding on either side:
tooltipWidth = graphics.getFont().getAdvance(tooltip) + 4;
yCoord = contentBottom - focusField.getManager().getVerticalScroll();
//check the tooltip is being drawn fully inside the screen height:
if (yCoord > (getHeight() - 30)) {
yCoord = getHeight() - 30;
}
//check the tooltip doesn't get drawn off the right side of the screen:
if (contentRight + tooltipWidth < getWidth()) {
xCoord = contentRight;
} else {
xCoord = getWidth() - tooltipWidth;
}
//draw the tooltip
graphics.setColor(backgroundColour);
graphics.fillRect(xCoord, yCoord, tooltipWidth, 30);
graphics.setColor(borderColour);
graphics.drawRect(xCoord, yCoord, tooltipWidth, 30);
graphics.setColor(fontColour);
graphics.drawText(tooltip, xCoord + 2, yCoord);
}
}
//doRedraw logic prevents infinite loop
if (doRedraw) {
//System.out.println("redrawing screen: " + System.currentTimeMillis());
screen.invalidate();
doRedraw = false;
}
}
}
+0
thnx rfsk2010這種解決我的問題 – 2012-02-03 17:09:11
+0
很高興你得到它的工作 – rfsk2010 2012-02-03 17:09:37
相關問題
- 1. 黑莓開發 - UI設計
- 2. 黑莓Java UI開發
- 3. 黑莓大膽工具提示問題
- 4. 黑莓PIM演示設置鬧鐘/對話框/提醒
- 5. 黑莓6黑莓5
- 6. 黑莓圓形文本框
- 7. 打造黑莓高級UI包
- 8. 背景黑莓UI應用程序
- 9. 將UI組件添加到黑莓ListField
- 10. 黑莓UI工具欄:字段對齊
- 11. UI設計和開發黑莓
- 12. 黑莓顯示圖像
- 13. 黑莓機調試不顯示字符串中的黑莓值
- 14. 黑莓插件在Eclipse - 黑莓菜單項顯示不出來
- 15. 黑莓鱈魚簽約無黑莓JDE
- 16. 更新SQLite表文本框黑莓
- 17. 在自定義對話框黑莓
- 18. 對齊黑莓上的複選框
- 19. 在黑莓
- 20. 黑莓JDE ArrayList?
- 21. 黑莓問題
- 22. 從黑莓
- 23. 黑莓Dropbox API?
- 24. 黑莓System.getProperty( 「browser.useragent」)
- 25. 黑莓緩衝
- 26. 黑莓ObjectListField
- 27. 黑莓textfield
- 28. 黑莓JDE FieldChangeListener
- 29. 黑莓BrowserField/BrowserContent
- 30. 黑莓地圖
您可以使用做'BitmapField'和'LabelField',並將它們添加到'VerticalFieldManger'或'HorizontalFieldManager'。您也可以爲此編寫自定義的「Field」。 – Rupak 2012-02-03 16:32:19
感謝Rupak提供您的意見,實際上我的屏幕上有一個BitMapField,只需在此BitmapField聚焦或懸停時顯示標題,就像在此頁面上的twitter,facebook或google +圖標上移動鼠標時一樣我正在使用JDE6 – 2012-02-03 16:41:37