您的位置:首页 > 其它

黑莓6.0列表模糊搜索高亮显示

2013-06-28 17:17 218 查看
首先,绘制界面。一个输入框EditField,一个按钮,代码省略。

效果图:


下面,主要介绍搜索的原理:

private Vector search(Vector data,String key)//这个方法是搜索获取结果,当然也可以忽略大小写,全部toLowerCase
        {
        	Vector v = new Vector();
        	for (int i = 0; i < data.size(); i++) {
        		String name = (String) data.elementAt(i);
        		if(name.indexOf(key) != -1)
        		{
        			v.addElement(name);
        		}
        		
			}
        	return v;
        }
        protected boolean trackwheelClick(int i, int j) {
    		Field field = getFieldWithFocus();
    		if(field instanceof VerticalFieldManager){    	
    			field  = ((VerticalFieldManager) field).getFieldWithFocus();
    			key = ((SearchTitleManager) field).getInput();
    			if (field instanceof SearchTitleManager) {
    				field = ((SearchTitleManager) field).getFieldWithFocus();
    				if (field instanceof CustomButtonField) {
    					if (key.length() > 0){    						
    						for (int k = list.getSize()-1; k >=0; k--) {//循环删除搜索前list的数据
								
    							list.delete(k);
							}
    						data=search(data,key);//获取搜索的结果
    						if(data.size() == 0)
    						{    							
    							data = sdata;//如果搜索结果为空,就使用原来的数据,sdata在最初添加数据的时候赋值
    						}
    			            for (int l = 0; l< data.size(); l++)
    			            {
    			                list.insert(l);
    			            }
    						list.invalidate();
    					}
    					else{
							for (int k = list.getSize() - 1; k >= 0; k--) {

								list.delete(k);
							}
    						data = sdata;
    			            for (int l = 0; l< data.size(); l++)
    			            {
    			                list.insert(l);
    			            }
    						list.invalidate();
    					}
    				}
    				return true;
    			}
    		}
    		return true;
    	}


以上的搜索原理也很简单,在下面就是绘制问题了。我采取最简单的substring(没办法技术有限)

public void drawListRow(ListField listField, Graphics graphics,
                int index, int y, int width)
        {
            String str = (String) this.get(listField, index);
            Font font = Font.getDefault();
            if(key.length()>0)
            {
            	StringBuffer sb = new StringBuffer();
            	graphics.setColor(Color.BLACK);
            	graphics.drawText(str.substring(0, str.indexOf(key)), 0, y);
            	graphics.setColor(Color.RED);
            	graphics.drawText(str.substring(str.indexOf(key), str.indexOf(key)+key.length()), font.getAdvance(str.substring(0, str.indexOf(key))), y);
            	graphics.setColor(Color.BLACK);
            	graphics.drawText(str.substring(str.indexOf(key)+key.length(), str.length()), font.getAdvance(str.substring(0, str.indexOf(key)+key.length())), y);
            	sb.append(str.substring(0, str.indexOf(key)));
            	sb.append(str.substring(str.indexOf(key), str.indexOf(key)+key.length()));
            	sb.append(str.substring(str.indexOf(key)+key.length(), str.length()));
            }else{            
            	graphics.setColor(Color.BLACK);	
            	graphics.drawText(str, 0, y);
            }
            
        }
绘制方法可以重新写一个单独的方法,因为绘制焦点的时候还要用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: