工具提示客户化 [英] ToolTip Customisation
问题描述
我创建了一个CustomToolTip参考
堆栈前面的问题,我问
I have created a CustomToolTip with reference to earlier questions i asked on stack
<一个href=\"http://stackoverflow.com/questions/10994282/custom-popup-to-work-like-tooltip-without-time-out\">Custom弹出
和
现在,我已经创建了一个CustomisedToolTip像如下
但问题是整个屏幕被显示或占用的空间
我需要这样的previous屏幕上的文本字段的那一刻是主动
Now , i have created a CustomisedToolTip like as follows But the issue is the whole screen gets displayed or occupied the space i need such that the TextField on the previous screen be Active for that moment
在code的定制工具提示我产生如下:
The code for Customised Tool Tip i generated is as follows
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.Characters;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.Background;
import net.rim.device.api.ui.decor.BackgroundFactory;
public class ToolTip extends PopupScreen{
protected void applyTheme() {
}
private static VerticalFieldManager vfm=new VerticalFieldManager(Manager.NON_FOCUSABLE|Manager.FIELD_HCENTER){
protected void paint(Graphics graphics) {
graphics.setColor(0x00FFFFFF);
graphics.fillRect(0,0,getWidth(),getHeight());
graphics.setColor(0x00000000);
graphics.drawRect(0,0,getWidth(),getHeight());
super.paint(graphics);
}
};
private LabelField lbl;
private static int xPosition;
private static int yPosition;
private String message;
private static Bitmap toolTipImg;
private static BitmapField toolTipBmpFld;
private static ButtonField button;
public ToolTip(final String message,int xPos,int yPos,final Bitmap toolTipImg){
super(vfm);
this.xPosition=xPos;
this.yPosition=yPos;
this.message=message;
this.toolTipImg=toolTipImg;
button=new ButtonField(message,ButtonField.NON_FOCUSABLE){
protected void paint(Graphics graphics) {
graphics.drawBitmap(0,0, toolTipImg.getWidth(), toolTipImg.getHeight(), toolTipImg, 0, 0);
super.paint(graphics);
}
protected void layout(int width, int height) {
super.layout(width, height);
setExtent( toolTipImg.getWidth(), toolTipImg.getHeight());
}
};
vfm.add(button);
}
protected void sublayout(int width, int height) {
super.sublayout(width, height);
setPosition(xPosition, yPosition);
}
protected boolean keyChar(char c, int status, int time) {
// TODO Auto-generated method stub
if(c==Characters.ESCAPE)
{
UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());
}
return super.keyChar(c, status, time);
}
}
我可以得到一个弹出这样的黑莓
Can i get a pop up like this in Blackberry
推荐答案
覆盖的保护无效漆(图形图像)
方法 MainScreen
可在这种情况下,有帮助的。
Overriding the protected void paint(Graphics graphics)
method of MainScreen
can be helpful in this case.
在字段
获得焦点,你可以告诉 MainScreen
(父画面)绘制的 提示
的上它完成它自己的绘图后指定位置。而当字段
失去焦点,可以避开的 提示
的画。又一个的 定时
的可以引入用于去除的 提示
的经过一段时间后。
When a Field
get focus, you can tell the MainScreen
(parent screen) to draw a tooltip
on specified position after it completes it own drawing. And when the Field
lost focus, you can avoid tooltip
painting. Also a timer
can be introduced for removing the tooltip
after some time.
检查下列实现。实施有待提高,目前它只是重新presents我的想法。
Check following implementation. The implementation needs to be improved, currently it's only represents my idea.
public final class MyScreen extends MainScreen implements TooltipProtocol {
private TooltipProtocol tooltipProtocolInstance;
public MyScreen() {
tooltipProtocolInstance = this;
ButtonField bfOne = getButtonField("ButtonField One", "Tooltip One", 200, 20);
ButtonField bfTwo = getButtonField("ButtonField Two", "Tooltip Two", 200, 60);
add(bfOne);
add(bfTwo);
}
private ButtonField getButtonField(String text, final String tooltiptext, final int x, final int y) {
ButtonField bf = new ButtonField(text) {
protected void onFocus(int direction) {
tooltipProtocolInstance.showToolTipText(tooltiptext, x, y);
super.onFocus(direction);
}
protected void onUnfocus() {
tooltipProtocolInstance.hideToolTipText();
super.onUnfocus();
}
};
return bf;
}
private String toolTipText;
private int xTooptip;
private int yTooptip;
private Timer tooltipTimer;
public void showToolTipText(String text, int x, int y) {
toolTipText = text;
xTooptip = x;
yTooptip = y;
if (tooltipTimer != null) {
tooltipTimer.cancel();
tooltipTimer = null;
}
tooltipTimer = new Timer();
tooltipTimer.schedule(new TimerTask() {
public void run() {
hideToolTipText();
}
}, 2000);
invalidate();
}
public void hideToolTipText() {
toolTipText = null;
invalidate();
}
protected void paint(Graphics graphics) {
super.paint(graphics);
if (toolTipText != null) {
int oldColor = graphics.getColor();
graphics.setColor(Color.GREEN);
graphics.drawText(toolTipText, xTooptip, yTooptip);
graphics.setColor(oldColor);
}
}
}
interface TooltipProtocol {
public void showToolTipText(String text, int x, int y);
public void hideToolTipText();
}
结果
结果
的以下是上面code的输出:的
结果
结果
Following are output of the above code:
- 当第一个按钮得到集中
结果
结果
- 当第一个按钮失去焦点,第二个按钮得到聚焦
结果
结果
- 当定时器隐藏的
提示
第二个按钮的的
- When timer hides
tooltip
of the second button
结果
结果
这篇关于工具提示客户化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!