2012-02-03 1 views
0

Я очень новичок в разработке пользовательского интерфейса BlackBerry и хочу знать, что есть ли какой-либо способ добавить подсказку в растровое изображение? так же, как атрибут заголовка в элементе HTMLBlackberry UI Hint Box

+0

Вы можете сделать это с помощью 'BitmapField' и' LabelField', и добавьте их в 'VerticalFieldManger' или' HorizontalFieldManager'. Также вы можете написать свое собственное поле «Поле» для этого. – Rupak

+0

Спасибо Rupak за ваши комментарии, на самом деле у меня есть BitMapField на моем экране, все, что я хочу, это показать заголовок, когда этот BitmapField сфокусирован или завис, так же, как когда вы перемещаете мышь на твиттере, facebook или значки google + на этой странице, я Я использую JDE6 –

ответ

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 такого рода решения моей проблемы –

+0

Рад, что вы получили его работу – rfsk2010

 Смежные вопросы

  • Нет связанных вопросов^_^