【问题标题】:Dialog creation in Blackberry在黑莓中创建对话框
【发布时间】:2012-06-09 16:49:05
【问题描述】:

嗨,我想创建一个包含用户名和密码的登录屏幕 和一个登录按钮 但是当用户未能在用户名或密码的文本字段中输入正确的信息时,应该会从文本字段右侧的一角弹出类似图像聊天对话框的弹出窗口,并显示相应的消息如何实现此自定义?

【问题讨论】:

    标签: blackberry screen customization textfield


    【解决方案1】:

    我给你一个简单的方法。如果它对您的问题不完美,您只需忽略此答案即可。

    在这里我做了如下的逻辑。我给了你两个按钮 1)登录 2)删除

    我想你知道如何验证你的文本字段是对还是错;保留一个 if 条件,如果正确,请编写您的逻辑不需要任何字段 否则错了你有三个条件

    1)id 错误 2)密码错误 或 3) 都错了

    根据这两个条件,您可以在上面的文本字段上添加特定的工具提示框。

    我同时提供错误条件和删除条件的样本

    按照你的要求去做

    资源:

    背景需要chat.png图片

    示例代码:

    package mypackage;
    
    import net.rim.device.api.system.Bitmap;
    import net.rim.device.api.ui.Field;
    import net.rim.device.api.ui.FieldChangeListener;
    import net.rim.device.api.ui.UiApplication;
    import net.rim.device.api.ui.XYEdges;
    import net.rim.device.api.ui.component.BasicEditField;
    import net.rim.device.api.ui.component.ButtonField;
    import net.rim.device.api.ui.container.MainScreen;
    import net.rim.device.api.ui.container.VerticalFieldManager;
    import net.rim.device.api.ui.decor.Border;
    import net.rim.device.api.ui.decor.BorderFactory;
    
    /**
     * A class extending the MainScreen class, which provides default standard
     * behavior for BlackBerry GUI applications.
     */
    public final class MyScreen extends MainScreen implements FieldChangeListener
    {
        /**
         * Creates a new MyScreen object
         */
        private BasicEditField id,password;
        private ButtonField login,cancel;
        private  VerticalFieldManager id_mgr,pass_mgr;
        private PopupField id_hint,pass_hint;
        public static Bitmap img;
        public MyScreen()
        { 
            img=Bitmap.getBitmapResource("chat.png");
            // Set the displayed title of the screen       
            setTitle("Login Page");
            Border b=BorderFactory.createRoundedBorder(new XYEdges(5, 5, 5, 5), Border.STYLE_SOLID);
            id_hint=new PopupField("Wrong Id", img);
    
            pass_hint=new PopupField("Wrong password", img);
            id_mgr=new VerticalFieldManager();
    
            id=new BasicEditField(){
                protected void layout(int width, int height) {
                    super.layout(120, 40);
                    setExtent(120, 40);
    
                }
            };
            id.setBorder(b);
            add(id_mgr);
            add(id);
            pass_mgr=new VerticalFieldManager();
            password=new BasicEditField(){
                protected void layout(int width, int height) {
                    super.layout(120, 40);
                    setExtent(120, 40);
    
                }
            };
            password.setBorder(b);
            add(pass_mgr);
            add(password);
    
    
    
            login=new ButtonField("Login");
            login.setChangeListener(this);
            add(login);
    
            cancel=new ButtonField("Remove");
            cancel.setChangeListener(this);
            add(cancel);
    
        }
        public void fieldChanged(Field field, int context) {
            if(field==login)
            {
                try {
    //              id_mgr.add(new NullField(Field.FOCUSABLE));
                    id_mgr.add(id_hint);
                    id_mgr.setPadding(0, 0, 0, 50);
                    pass_mgr.add(pass_hint);
                    pass_mgr.setPadding(0, 0, 0, 50);
                    id_hint.setFocus();
                } catch (IllegalStateException e) {
                    return;
                }
            }else if(cancel==field)
            {
                synchronized (UiApplication.getEventLock()) {
                    id_mgr.deleteAll();
                    pass_mgr.deleteAll();
                }
            }
    
        }
    }
    

    PopupField.java 的类是

    package mypackage;
    
    import net.rim.device.api.system.Bitmap;
    import net.rim.device.api.ui.Color;
    import net.rim.device.api.ui.Graphics;
    import net.rim.device.api.ui.component.BitmapField;
    
    public class PopupField extends BitmapField{
        private  Bitmap img,scalled_img;
        private String message;
        private int layout_width;
    
        public PopupField(String message,Bitmap img)
        {
            this.message=message;
            layout_width=this.getFont().getAdvance(message)+40;
            scalled_img=new Bitmap(layout_width, img.getHeight());
            img.scaleInto(scalled_img, Bitmap.FILTER_BILINEAR);
            this.img=scalled_img;
        }
    
        protected void layout(int width, int height) {
    
            super.layout(img.getWidth(), img.getHeight());
            setExtent(img.getWidth(), img.getHeight());
    
        }
    
        protected void paint(Graphics graphics) {
            graphics.drawBitmap(0, 0, img.getWidth(), img.getHeight(), img,0,0);
            graphics.setColor(Color.RED);
            graphics.drawText(message,20,20);
            super.paint(graphics);
        }
    
    }
    

    输出图片:

    继续帮助他人

    其他解决方案是这个链接会告诉你 http://v4ks1n.wordpress.com/2011/01/28/tooltips-class-for-blackberry/

    【讨论】:

    • 我同意你的回答,问题是工具提示在屏幕上占据了一些空间,因为字段不能在 TextField 上重叠
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多