您可以对普通EditField使用与此处所示类似的技术。基本上,您需要重写子类中的
paint()方法
AutoCompleteField。在中
paint(),检查并查看该字段是否为空,如果是,则手动绘制所需的
占位符 文本。
不同的是,
AutoCompleteField是
Manager有
BasicEditField它的内部。因此,要正确绘制文本,您需要找出父级
Manager(
AutoCompleteField)内编辑字段的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()方法上没有做任何不同的事情,因为它与占位符文本问题没有直接关系。



