0

スタックで尋ねた以前の質問を参照して CustomToolTip を作成しました

カスタムポップアップ

ダイアログの作成

今、私は次のようにCustomizedToolTipを作成しましたが、問題は、前の画面のTextFieldがその瞬間にアクティブになるように、画面全体が表示されるか、必要なスペースを占有することです

生成されたカスタマイズされたツール ヒントのコードは次のとおりです。

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);
    }


}

Blackberry でこのようなポップアップを表示できますか

ツールチップ画像

4

2 に答える 2

2

protected void paint(Graphics graphics)この場合、のメソッドをオーバーライドするMainScreenと便利です。

Fieldフォーカスを取得すると、(親画面)が独自の描画を完了した後、指定された位置に描画するように指示できMainScreenますtooltip。そして、Field焦点を失ったとき、あなたはtooltip絵を描くことを避けることができます。また、しばらくしてからtimer削除するために導入することもできます。tooltip

次の実装を確認してください。実装を改善する必要がありますが、現在は私の考えを表しているにすぎません。

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();
}



上記のコードの出力は次のとおりです。

  • 最初のボタンがフォーカスされたとき



  • 最初のボタンがフォーカスを失ったとき、2番目のボタンがフォーカスを取得しました



  • タイマーがtooltip2番目のボタンを非表示にしたとき



于 2012-06-18T10:54:39.287 に答える
0

私が質問を理解している限り、ツール ヒントのようなポップアップ画面を作成したいのですが、ツール ヒントによって画面全体をブロックすることなく、ユーザーが LoginScreen UI 要素を操作する必要があります。

これは、Blackberry では実現できません。PropupScreen はダイアログのように機能します。ポップアップ画面のインスタンスを画面スタックにプッシュして視覚的に表示するため、デリゲート画面は常にブロックされます。画面スタックからポップアップを削除しない限り、LoginScreen UI コンポーネントを操作できませんが、それらは視覚的に利用可能です。

詳細については、Blackberry Java ドキュメントを参照してください: http://www.blackberry.com/developers/docs/6.0.0api/net/rim/device/api/ui/container/PopupScreen.html

編集:1

タイマーを提供するツールチップ画面を作成できます。グーグルで検索すると、多くのコード サンプルが得られると確信しています。以下に1つのリンクをリストしました。

http://v4ks1n.wordpress.com/2011/01/28/tooltips-class-for-blackberry/

于 2012-06-15T11:46:40.497 に答える