`

BlackBerry定制自己喜爱的List Field

阅读更多

BB上面提供可继承的ListField类,我们可以直接继承此类,然后重写里面的方法,另外继承ListFieldCallBack接口,实现回调。

 

请看代码: 

 MyList.java

 

 

package com.mdev;

import net.rim.device.api.ui.ContextMenu;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.ListField;
import net.rim.device.api.ui.component.ListFieldCallback;


/**
 * 
 * @author Sinfrancis wong
 * @site: http://mdev.cc
 *
 */
public class MyList extends ListField implements ListFieldCallback {

	String[] datas = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"};
	
	/**
	 * 数据总长度
	 */
	int dataSize;
	/**
	 * 每一行的高度
	 */
	int rowHeight;
	
	
	
	public MyList() {
		
		rowHeight = 40;
		dataSize = datas.length;
		/**
		 * 设置回调函数
		 */
		setCallback(this);
		/**
		 * 设置一共有多少行
		 */
		setSize(dataSize);
		/**
		 * 设置每一行高度
		 */
		setRowHeight(rowHeight);
	}
	protected void paint(Graphics graphics) {
		/**
		 * 画出背景
		 */
		graphics.setColor(0x336699);
		graphics.fillRect(0, 0, getPreferredWidth(), getPreferredHeight());
		
		graphics.setColor(0x000000);
		int i = 0;
		while( i < dataSize){
			drawListRow(this, graphics, i, i*getRowHeight(), getPreferredWidth());
			i++;
		}
	}
	
	protected void layout(int width, int height) {
		
		/**
		 * 设置整个ListField的总高度和宽度
		 */
		setExtent(getPreferredWidth(), getPreferredHeight());
	}
	public int getPreferredHeight() {
		return dataSize * rowHeight ;
	}

	public int getPreferredWidth() {
		return 360;
	}

	public void drawListRow(ListField listField, Graphics graphics, int index,
			int y, int width) {
		/**
		 * 画出文字
		 */
		graphics.drawText(datas[index], 10, y);
		
		/**
		 * 画出下划线
		 */
		graphics.drawLine(0, y+rowHeight, 360, y+rowHeight);
	}

	public Object get(ListField listField, int index) {
		return datas[index];
	}
	public int getPreferredWidth(ListField listField) {
		return getPreferredWidth();
	}

	public int indexOfList(ListField listField, String prefix, int start) {
		return 0;
	}
	
	protected void makeContextMenu(ContextMenu contextMenu) {
	}
	
}

 

 

MyScreen.java

 

 

package com.mdev;

import java.util.Vector;
import net.rim.device.api.ui.ContextMenu;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;


/**
 * 
 * @author Sinfrancis wong
 * @site: http://mdev.cc
 *
 */
public class MyScreen extends MainScreen {
	public MyScreen() {
		MyList m = new MyList();
	
		/**
		 * 设置VerticalFieldManager可以滚动
		 */
		VerticalFieldManager fieldManager = new VerticalFieldManager(Manager.VERTICAL_SCROLL|Manager.VERTICAL_SCROLLBAR|Manager.VERTICAL_SCROLLBAR_MASK){
			
			protected void sublayout(int maxWidth, int maxHeight) {
				super.sublayout(maxWidth, maxHeight);
				
				/**
				 * 设置Manager的大小为300*200,list里面的数据只在这个范围内滚动,如果注释掉就会显示全屏。
				 */
				setExtent(300, 200);
			}
			protected void makeContextMenu(ContextMenu contextMenu) {
			}
			
			protected void makeMenu(Menu menu, int instance) {
			}
		};
		
		
		
		/**
		 * 设置外上边距和外左边距
		 */
		//fieldManager.setPadding(50, 0, 0, 10);
		
		/**
		 * 设置内上边距和内左边距
		 */
		fieldManager.setMargin(50, 0, 0, 10);
		
		
		
		//**注意:如果设置外上边距,请将list field的总高度加上您设置的外上边距高度,
		//**比如manager外上边距为 50,那么list field的总高度也要加上50,不然无法滚动到底。
		//**设置内上边距,list field无需在加上内上边距的高度
		//**以上是在非全屏模式下的listfield
		
		fieldManager.add(m);
		add(fieldManager);
	}
	
	protected void makeContextMenu(ContextMenu contextMenu) {
	}
	
	protected void makeMenu(Menu menu, int instance) {
	}
}

 

 

MyApplication.java

 

 

package com.mdev;

import net.rim.device.api.ui.UiApplication;

/**
 * 
 * @author Sinfrancis wong
 * @site: http://mdev.cc
 *
 */
public class MyApplication extends UiApplication {
	
	public MyApplication() {
		MyScreen m = new MyScreen();
		pushScreen(m);
	}
	
	public static void main(String[] args) {
	 MyApplication myApplication = new MyApplication();
	 myApplication.enterEventDispatcher();
	 
	}
}

 

 

 

所有应该注意的地方都写在注释里面了,请看注释,截图:

 


  • 大小: 6.2 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics