Blackberry:创建自定义字段以与VerticalFieldManager一起使用以复制tableview
我不知道我是否选择了正确的路线,但我已经决定创建一个自定义字段并在verticalfieldmanager中使用它 在自定义字段中,我想在左侧添加图像,在右侧添加文本 我刚开始,但遇到了一些问题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
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)将您的需求作为图像插入,我们可以理解并尝试帮助您