工具提示客户化 [英] ToolTip Customisation

查看:131
本文介绍了工具提示客户化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆