2012-06-01 26 views
1

我有一个AutoCompleteField在我的黑莓应用程序的屏幕之一。我必须显示一个占位符文本以提供用户输入信息的提示。在黑莓中的自动完成字段上放置文本文本

这里是AutoCompleteField

BasicFilteredList filterList = new BasicFilteredList(); 
     String[] address = { "T 115 Centro Galleria Shopping Centre, Cnr Old Collier and Walters Road Morley WA 1522", 
       "1423 SEAVIEW POINT POINT COOK VIC 2674", 
       "Lot 1498 Yarraman Road Wyndham Vale VIC 3795", 
       "Lot 3506 Witchmount Close Hillside VIC 4055", 
       "6 Paas Place Williamstown VIC 4233", 
       "Lot 99 14 James Close Sunbury VIC 4502", 
       "1 Charlotte Street Clayton South VIC 4779" }; 

     filterList.addDataSet(1, address, "address", BasicFilteredList.COMPARISON_IGNORE_CASE); 
     AutoCompleteField autoCompleteField = new AutoCompleteField(filterList){ 
      public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) { 
       ListField _list = getListField(); 
       if (_list.getSelectedIndex() > -1) { 
        if(selectedText!=null){ 
         BasicFilteredListResult result = (BasicFilteredListResult) selection; 
         selectedText.setText(result._object.toString()); 
        } 
       } 
      } 
     }; 
     add(autoCompleteField); 

任何的下面的代码,请建议我如何能实现相同。

谢谢。

回答

2

您可以使用与the one shown here for normal EditFields类似的技术。基本上,您需要覆盖AutoCompleteField子类中的paint()方法。在paint()中,检查该字段是否为空,如果是,则手动绘制所需的占位符文本。

区别在于AutoCompleteFieldManager,其内部为BasicEditField。因此,要正确绘制文本,需要计算父ManagerAutoCompleteField)内编辑字段的x和y偏移量。

所以,这个类的一个实例来替换你的AutoCompleteField例如:

private class CustomAutoCompleteField extends AutoCompleteField { 
     private int yOffset = 0; 
     private int xOffset = 0; 

     public CustomAutoCompleteField(BasicFilteredList filteredList) { 
     super(filteredList); 
     } 

     protected void paint(Graphics g) { 
     super.paint(g); 
     if (xOffset == 0) { 
      // initialize text offsets once 
      xOffset = getEditField().getContentLeft(); 
      yOffset = getEditField().getContentTop(); 
     } 
     String text = getEditField().getText(); 
     if (text == null || text.length() == 0) { 
      int oldColor = g.getColor(); 
      g.setColor(Color.GRAY); 
      g.drawText("enter text", xOffset, yOffset); 
      g.setColor(oldColor); 
     } 
     } 

     public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) { 
     ListField _list = getListField(); 
     if (_list.getSelectedIndex() > -1) { 
      if(selectedText!=null){ 
       BasicFilteredListResult result = (BasicFilteredListResult) selection; 
       selectedText.setText(result._object.toString()); 
      } 
     } 
     } 
    } 

我测试了这个在OS 5.0,与没有任何保证金或填充集的实例。有可能在不同的布局下,您可能需要调整计算x和y偏移量的逻辑。但是,上面的代码显示了您的基本想法。祝你好运。

编辑:上述代码的提示与警告,您的onSelect()方法显然是依赖于未显示的代码。就像上面的代码不会被编译。我在那里只留下onSelect()只是为了表明我基本上只是替换原来的匿名类,并且在onSelect()方法中没有做任何不同的事情,因为它与占位符文本问题没有直接关系。

+0

谢谢Nate。我会试试看。 –