自定义PopUp工作提示工具提示没有时间

时间:2012-06-12 09:57:15

标签: blackberry popup tooltip customization

我需要创建一个自定义PopUp来像ToolTip一样工作我该如何实现它 我已经编写了代码,请查看并告诉我需要改进的地方

import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;


    public class ToolTip extends PopupScreen{

        private static VerticalFieldManager vfm;
        private LabelField lbl;
        private int xPosition;
        private int yPosition;
        private String message;
        public ToolTip(String message,int xPos,int yPos){
            super(vfm);
            this.xPosition=xPos;
            this.yPosition=yPos;
            this.message=message;
            vfm=new VerticalFieldManager(){
                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);
                }       

            };

            lbl=new LabelField(message);
            vfm.add(lbl);
        }

        protected void sublayout(int width, int height) {
            super.sublayout(width, height);
            setExtent(lbl.getPreferredWidth(), lbl.getPreferredHeight());
            setPosition(xPosition, yPosition);


        }

    }

我在super(vfm)收到NullPointer Exception错误,因为当我按如下方式使用它时,vfm为null。如何优化我的代码。

ButtonField bf1=new ButtonField("Login"){
            protected boolean navigationClick(int status, int time) {

            UiApplication.getUiApplication().pushScreen(new ToolTip("Hello ", 50, 50));
                return super.navigationClick(status, time);
            }

        };
        add(bf1);

1 个答案:

答案 0 :(得分:1)

将初始化的VerticalFieldManager实例传递给super(..)的{​​{1}}。请检查以下代码。

PopupScreen


更新了自定义后台支持的代码

class ToolTip extends PopupScreen {
    private static VerticalFieldManager vfm = new VerticalFieldManager() {
        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);
        }
    };

    // other codes

    public ToolTip(String message, int xPos, int yPos) {
        super(vfm);
        // other codes
    }

    protected void sublayout(int width, int height) {
        // other codes
    }
}

您需要使用class ToolTip extends PopupScreen { private int xPosition; private int yPosition; public ToolTip(String message, int xPos, int yPos) { super(new VerticalFieldManager()); // Define and set background here // Use - BackgroundFactory.createBitmapBackground(bitmap) for bitmap background getDelegate().setBackground(BackgroundFactory.createSolidBackground(Color.RED)); // Add other UI Field here this.xPosition=xPos; this.yPosition=yPos; add(new LabelField(message)); // other codes } // Empty implementation of this will disable default rounded border. protected void applyTheme() { } protected void sublayout(int width, int height) { super.sublayout(width, height); setPosition(xPosition, yPosition); } } 来设置背景。检查课程getDelegate().setBackground(..)以创建自定义背景。