Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry:创建自定义字段以与VerticalFieldManager一起使用以复制tableview_Blackberry - Fatal编程技术网

Blackberry:创建自定义字段以与VerticalFieldManager一起使用以复制tableview

Blackberry:创建自定义字段以与VerticalFieldManager一起使用以复制tableview,blackberry,Blackberry,我不知道我是否选择了正确的路线,但我已经决定创建一个自定义字段并在verticalfieldmanager中使用它 在自定义字段中,我想在左侧添加图像,在右侧添加文本 我刚开始,但遇到了一些问题 package mypackage; import net.rim.device.api.ui.DrawStyle; import net.rim.device.api.ui.Field; import net.rim.device.api.ui.Graphics; public class Cus

我不知道我是否选择了正确的路线,但我已经决定创建一个自定义字段并在verticalfieldmanager中使用它

在自定义字段中,我想在左侧添加图像,在右侧添加文本

我刚开始,但遇到了一些问题

package mypackage;

import net.rim.device.api.ui.DrawStyle;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Graphics;

public class CustomEventField extends Field implements DrawStyle {

    private String title;
    private String by;
    private String date;
    private String desc;


    public CustomEventField(String title, String by, String date, String desc){
        super();
        this.title = title;
        this.by = by;
        this.date = date;
        this.desc = desc;

    }

    protected void layout(int width, int height) {
        setExtent(width,height);

    }

    protected void paint(Graphics graphics) {

        graphics.drawText(this.title, 0, 0);

        graphics.drawText(this.by, 50, 0);


    }

}

如何让drawText转到它前面的drawText的下一行?我必须计算字体的高度并将其添加到y位置吗?

根据上述代码,它可能不可行,因此我创建了一个自定义类,可以显示图像、标题和日期。单击项目时,将显示一个对话框及其索引号 这对于自定义列表视图也很有用

注意:如果你想试试下面的图片,你只需要使用这个

如果这里有任何更正,请让我知道

class CustomListField extends HorizontalFieldManager{

        private Bitmap scale_image;
        private int width=0;
        private int height=0;
        private int background_color=0;
        private BitmapField bitmap_field;
        private boolean flag=false;
        public CustomListField(String title, Bitmap image, String date,int image_width,int image_height,int background_color){
            super(NO_HORIZONTAL_SCROLL|USE_ALL_WIDTH);
            this.background_color=background_color;
            width=image_width;
            height=image_width;
            if(image!=null){
                scale_image=new Bitmap(image_width, image_height);
                image.scaleInto(scale_image, Bitmap.FILTER_LANCZOS);
                bitmap_field=new BitmapField(scale_image);
                flag=false;
                bitmap_field.setMargin(5, 5, 5, 5);
                add(bitmap_field);
            }


            VerticalFieldManager vmanager=new VerticalFieldManager(USE_ALL_WIDTH|Field.FIELD_VCENTER){
                protected void sublayout(int maxWidth, int maxHeight) {
                    super.sublayout(Display.getWidth()-width, height);
                    setExtent(Display.getWidth()-width, height);
                }
            };
            LabelField title_lbl=new LabelField("Title: "+title,Field.NON_FOCUSABLE|DrawStyle.ELLIPSIS);
            vmanager.add(title_lbl);

            LabelField date_lbl=new LabelField("Date: "+date,Field.NON_FOCUSABLE);
            vmanager.add(date_lbl);

            Font fon=title_lbl.getFont();
            int title_height=fon.getHeight();

            Font font=date_lbl.getFont();
            int date_height=font.getHeight();
            int pad=title_height+date_height;
            title_lbl.setPadding((height-pad)/2, 0, 0, 0);
            add(vmanager);
            add(new NullField(FOCUSABLE));
        }

        protected void sublayout(int maxWidth, int maxHeight) {
            super.sublayout(Display.getWidth(), height);
            setExtent(Display.getWidth(), height);
        }
        protected void paint(Graphics graphics) {
            if(flag)
            graphics.setBackgroundColor(background_color);
            graphics.clear();
            super.paint(graphics);
        }
        protected void onFocus(int direction) {
            super.onFocus(direction);
            flag=true;
            invalidate();
        }
        protected void onUnfocus() {
            invalidate();
            flag=false;
        }
        protected boolean navigationClick(int status, int time) {

            if(Touchscreen.isSupported()){
                return false;
            }else{
                fieldChangeNotify(1);
                return true;
            }

        }
        protected boolean touchEvent(TouchEvent message) 
        {
            if (TouchEvent.CLICK == message.getEvent()) 
            {

                FieldChangeListener listener = getChangeListener();
                if (null != listener)
                    this.setFocus();
                    listener.fieldChanged(this, 1);
            }
            return super.touchEvent(message);
        }
    }
您可以按如下方式调用该类:您必须传递位图、标题、图像的高度和宽度以及背景颜色

      class sampleScreen extends MainScreen implements FieldChangeListener
        {
            private CustomListField cu_field[];
            private Bitmap image=null;
            int size=8;
            public sampleScreen() {
                VerticalFieldManager vmanager=new VerticalFieldManager(VERTICAL_SCROLL|VERTICAL_SCROLLBAR){
                    protected void sublayout(int maxWidth, int maxHeight) {

                        super.sublayout(Display.getWidth(),Display.getHeight());
                        setExtent(Display.getWidth(),Display.getHeight());
                    }
                };
                cu_field=new CustomListField[size]; 
                for(int i=0;i<size;i++){
                    image=Bitmap.getBitmapResource("sample_"+i+".jpg");
cu_field[i]=new CustomListField("BlackBerry models that had a built-in mobile phone, were the first models that natively ran Java, and transmitted data over the normal 2G cellular network. RIM began to advertise these devices as email-capable mobile phones rather than as 2-way pagers.",
     image, "jan2011", 100, 100,Color.RED);
                    cu_field[i].setChangeListener(this);
                    vmanager.add(new SeparatorField());
                    vmanager.add(cu_field[i]);
                }
                add(vmanager);
            }

            public void fieldChanged(Field field, int context) {
                // TODO Auto-generated method stub
                for(int i=0;i<size;i++){
                    if(field==cu_field[i]){
                        final int k=i;
                        UiApplication.getUiApplication().invokeLater(new Runnable() {
                            public void run() {
                                Dialog.alert("You click on Item No "+k);
                            }
                        });
                    }
                }
            }
        }
class sampleScreen扩展MainScreen实现FieldChangeListener
{
私有CustomListField cu_字段[];
私有位图图像=空;
int size=8;
公共样本屏幕(){
VerticalFieldManager vmanager=新的VerticalFieldManager(垂直滚动条|垂直滚动条){
受保护的空位子布局(int-maxWidth、int-maxHeight){
super.sublayout(Display.getWidth(),Display.getHeight());
setExtent(Display.getWidth(),Display.getHeight());
}
};
cu_字段=新CustomListField[大小];

对于(int i=0;ibettor)将您的需求作为图像插入,我们可以理解并尝试帮助您